VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > SQL教程 >
  • sqlserver 批量修改数据库表主键名称为PK_表名

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

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
--将表的主键名统一规范为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.xtype='PK'条件,查主键约束
  ON a.id=b.parent_obj
 LEFT JOIN sysindexes AS --索引表,根据(主键)约束名称匹配,查对应字段索引
  ON a.id=c.id AND b.name=c.name
 LEFT JOIN sysindexkeys AS --索引中对应键、列的表,根据索引匹配,查字段id
  ON a.id=d.id AND c.indid=d.indid
 LEFT JOIN syscolumns AS --字段表,根据字段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