欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sqlserver 批量修改数据库表主键名称为PK_表名

程序员文章站 2022-06-21 23:25:21
sqlserver 批量修改表的主键名称,批量修改数据表的名称 ......

1.我们在创建sqlserver得数据表的主键的时候,有时会出现,后面加一串随机字符串的情况,如图所示:

sqlserver 批量修改数据库表主键名称为PK_表名

 

 2.如果你有强迫症的话,可以使用以下sql脚本进行修改,将主键的名称修改为pk_表名.

--将表的主键名统一规范为pk_表名
  
declare @pk_name_old varchar(100),@table_name varchar(100),@pk_name_new varchar(100),@col_name varchar(100)
declare cursor_update_table_pk_name cursor for

select 
  a.name as 'tbl_name',
  e.name as 'col_name',
  b.name,
  'pk_'+a.name as 'new_pk_name'
from sysobjects as a          --对象表,结合a.xtype='u'条件,查用户表
 left join sysobjects as b --对象表,结合b.xtype='pk'条件,查主键约束
  on a.id=b.parent_obj
 left join sysindexes as c --索引表,根据(主键)约束名称匹配,查对应字段索引
  on a.id=c.id and b.name=c.name
 left join sysindexkeys as d --索引中对应键、列的表,根据索引匹配,查字段id
  on a.id=d.id and c.indid=d.indid
 left join syscolumns as e --字段表,根据字段id匹配,查字段名称
  on a.id=e.id and d.colid=e.colid
where a.xtype='u'
  and b.xtype='pk'
  
open cursor_update_table_pk_name
fetch next from cursor_update_table_pk_name into @table_name,@col_name,@pk_name_old,@pk_name_new
while @@fetch_status = 0
	begin
		print ''+@table_name
			-- 存在主键约束,则删除 
			--if exists(select * from sysobjects where name=@pk_name_old and xtype='pk')
			
			exec('alter table '+@table_name+' drop constraint '+@pk_name_old)
			
			 -- 重新添加主键约束
			exec('alter table '+@table_name+' add constraint '+@pk_name_new+' primary key ('+@col_name+') ')
			
		fetch next from cursor_update_table_pk_name into @table_name,@col_name,@pk_name_old,@pk_name_new
	end
close cursor_update_table_pk_name
deallocate cursor_update_table_pk_name

  使用以上代码可以批量将表的主键名进行修改

3.你可以可以对以上脚本进行修改,比如批量给表的前面增加某个字符串,聪明的你肯定知道怎么做的。