sqlserver 批量修改數據庫表主鍵名稱為PK_表名


1.我們在創建sqlserver得數據表的主鍵的時候,有時會出現,后面加一串隨機字符串的情況,如圖所示:

 

 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.你可以可以對以上腳本進行修改,比如批量給表的前面增加某個字符串,聰明的你肯定知道怎么做的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM