IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)MSSQL → 重命名Sql Server外鍵約束名的方法

重命名Sql Server外鍵約束名的方法

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

數(shù)據(jù)庫(kù)原先是采用PowerDesigner設(shè)計(jì)的,Sql Server外鍵約束的命名非常難看,并且也和后來(lái)在SSMS中額外添加的Sql Server外鍵約束命名規(guī)則不一致,因此想遍歷數(shù)據(jù)庫(kù)的所有外鍵約束,找到外鍵約束的相關(guān)對(duì)象,然后重新生成一致的命名。

采用的命名規(guī)則是:

  1. FK_ForeignTable_PrimaryTable_On_ForeignColumn?

直白的翻譯就是,F(xiàn)oreignTable在ForeignColumn列上引用了PrimaryTable的主鍵。

Sql Server提供了很多動(dòng)態(tài)管理視圖(Dynamic management views,DMV)和存儲(chǔ)過程,方便我們對(duì)數(shù)據(jù)庫(kù)進(jìn)行維護(hù)。這里我用到了以下兩個(gè)sys.foreign_key_columns(包含外鍵約束完整信息)和sys.objects(數(shù)據(jù)庫(kù)對(duì)象信息)這兩個(gè)DMV以及sp_rename執(zhí)行重命名的系統(tǒng)存儲(chǔ)過程。代碼如下:

  1. declare?fkcur?cursor?for ?
  2. select ?
  3. OBJECT_NAME(col.constraint_object_id)?as?FKConstraintName ?
  4. ,fkTable.name?as?FKTable ?
  5. ,fkCol.name?as?FKColumn ?
  6. ,pkTable.name?as?PKTable ?
  7. ,pkCol.name?as?PKColumn ?
  8. from?sys.foreign_key_columns?col ?
  9. --?外鍵約束是建立在外鍵表上的, ?
  10. --?因此foreign_key_columns表中的parent_object_id和parent_column_id分別表示外鍵表和外鍵列 ?
  11. inner?join?sys.objects?fkTable ?
  12. ????on?fkTable.object_id?=?col.parent_object_id ?
  13. inner?join?sys.columns?fkCol ?
  14. ????on?fkCol.column_id?=?col.parent_column_id ?
  15. ????and?fkCol.object_id?=?fkTable.object_id ?
  16. --?foreign_key_columns表中的referenced_object_id和referenced_column_id分別指向 ?
  17. --?外鍵約束的主鍵表對(duì)象以及主鍵列 ?
  18. inner?join?sys.objects?pkTable ?
  19. ????on?pkTable.object_id?=?col.referenced_object_id ?
  20. inner?join?sys.columns?pkCol ?
  21. ????on?pkCol.column_id?=?col.referenced_column_id ?
  22. ????and?pkCol.object_id?=?pkTable.object_id ?
  23. order?by?OBJECT_NAME(col.constraint_object_id) ?
  24. ?
  25. open?fkcur ?
  26. declare?@constraintName?nvarchar(128) ?
  27. declare?@fkTable?nvarchar(64) ?
  28. declare?@fkColumn?nvarchar(64) ?
  29. declare?@pkTable?nvarchar(64) ?
  30. declare?@pkColumn?nvarchar(64) ?
  31. declare?@newConstraintName?nvarchar(128) ?
  32. ?
  33. fetch?next?from?fkcur ?
  34. into?@constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn ?
  35. while?@@FETCH_STATUS?=?0?
  36. begin ?
  37. ????set?@newConstraintName?=?'FK_'+@fkTable+'_'+@pkTable+'_On_'+@fkColumn ?
  38. ????exec?sp_rename?@constraintName,@newConstraintName,'Object' ?
  39. ?
  40. ????fetch?next?from?fkcur ?
  41. ????into?@constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn ?
  42. end ?
  43. close?fkcur ?
  44. deallocate?fkcur ?

關(guān)鍵詞標(biāo)簽:Sql Server

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 SqlServer2005對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行分區(qū)具體步驟 sql server系統(tǒng)表?yè)p壞的解決方法 sql server系統(tǒng)表?yè)p壞的解決方法 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶、角色、架構(gòu)的關(guān)系 MS-SQL2005服務(wù)器登錄名、角色、數(shù)據(jù)庫(kù)用戶、角色、架構(gòu)的關(guān)系

相關(guān)下載

    人氣排行 配置和注冊(cè)O(shè)DBC數(shù)據(jù)源-odbc數(shù)據(jù)源配置教程 如何遠(yuǎn)程備份(還原)SQL2000數(shù)據(jù)庫(kù) SQL2000數(shù)據(jù)庫(kù)遠(yuǎn)程導(dǎo)入(導(dǎo)出)數(shù)據(jù) SQL2000和SQL2005數(shù)據(jù)庫(kù)服務(wù)端口查看或修改 修改Sql Server唯一約束教程 SQL Server 2005降級(jí)到2000的正確操作步驟 sql server系統(tǒng)表?yè)p壞的解決方法 淺談JSP JDBC來(lái)連接SQL Server 2005的方法