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

創(chuàng)新互聯(lián)的團隊成員不追求數(shù)量、追求質(zhì)量。我們經(jīng)驗豐富并且專業(yè),我們之間合作時就好像一個人,協(xié)同一致毫無保留。創(chuàng)新互聯(lián)珍視想法,同時也看重過程轉(zhuǎn)化帶來的沖擊力和影響力,在我們眼中,任何細節(jié)都不容小覷。一直致力于為企業(yè)提供從主機域名、網(wǎng)站策劃、網(wǎng)站設(shè)計、電子商務(wù)商城網(wǎng)站建設(shè)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營銷服務(wù)。
采用的命名規(guī)則是:
- FK_ForeignTable_PrimaryTable_On_ForeignColumn
直白的翻譯就是,F(xiàn)oreignTable在ForeignColumn列上引用了PrimaryTable的主鍵。
Sql Server提供了很多動態(tài)管理視圖(Dynamic management views,DMV)和存儲過程,方便我們對數(shù)據(jù)庫進行維護。這里我用到了以下兩個sys.foreign_key_columns(包含外鍵約束完整信息)和sys.objects(數(shù)據(jù)庫對象信息)這兩個DMV以及sp_rename執(zhí)行重命名的系統(tǒng)存儲過程。代碼如下:
- declare fkcur cursor for
- select
- OBJECT_NAME(col.constraint_object_id) as FKConstraintName
- ,fkTable.name as FKTable
- ,fkCol.name as FKColumn
- ,pkTable.name as PKTable
- ,pkCol.name as PKColumn
- from sys.foreign_key_columns col
- -- 外鍵約束是建立在外鍵表上的,
- -- 因此foreign_key_columns表中的parent_object_id和parent_column_id分別表示外鍵表和外鍵列
- inner join sys.objects fkTable
- on fkTable.object_id = col.parent_object_id
- inner join sys.columns fkCol
- on fkCol.column_id = col.parent_column_id
- and fkCol.object_id = fkTable.object_id
- -- foreign_key_columns表中的referenced_object_id和referenced_column_id分別指向
- -- 外鍵約束的主鍵表對象以及主鍵列
- inner join sys.objects pkTable
- on pkTable.object_id = col.referenced_object_id
- inner join sys.columns pkCol
- on pkCol.column_id = col.referenced_column_id
- and pkCol.object_id = pkTable.object_id
- order by OBJECT_NAME(col.constraint_object_id)
- open fkcur
- declare @constraintName nvarchar(128)
- declare @fkTable nvarchar(64)
- declare @fkColumn nvarchar(64)
- declare @pkTable nvarchar(64)
- declare @pkColumn nvarchar(64)
- declare @newConstraintName nvarchar(128)
- fetch next from fkcur
- into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn
- while @@FETCH_STATUS = 0
- begin
- set @newConstraintName = 'FK_'+@fkTable+'_'+@pkTable+'_On_'+@fkColumn
- exec sp_rename @constraintName,@newConstraintName,'Object'
- fetch next from fkcur
- into @constraintName,@fkTable,@fkColumn,@pkTable,@pkColumn
- end
- close fkcur
- deallocate fkcur
【編輯推薦】
SQL Server外關(guān)鍵字約束的定義
sql server中動態(tài)sql語句的應(yīng)用
SQL Server刪除視圖的兩種方法
SQL SERVER視圖對查詢效率的提高
帶您了解sql server內(nèi)部變量
本文名稱:重命名SqlServer外鍵約束名的方法
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/cdohgji.html


咨詢
建站咨詢
