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

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

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

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

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

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

  1. FK_ForeignTable_PrimaryTable_On_ForeignColumn?

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

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

  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. --?外鍵約束的主鍵表對象以及主鍵列 ?
  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)閱讀

文章評論
發(fā)表評論

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

相關(guān)下載

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