2016-09-16 65 views
1

使用SQL Server 2014:我正在處理包含如此多未命名的默認約束條件的大型生產數據庫。如何正確重命名所有未命名的默認約束條件

未命名的默認約束會導致很多問題,因爲它們在每個填充數據庫模式填充腳本的「DEV」或「QA」環境中獲得一個隨機名稱。隨機默認約束名稱導致SSDT模式比較/更新腳本失敗。

我需要正確地將生產數據庫的默認列約束命名爲正確的名稱,所以當我腳本化數據庫模式時,它們不會獲得隨機名稱。

我用下面的查詢來獲取的未命名默認限制列表:

select 
    t.name, c.name, d.name, definition 
from 
    sys.tables t 
join  
    sys.default_constraints d on d.parent_object_id = t.object_id 
join  
    sys.columns c on c.object_id = t.object_id  
        and c.column_id = d.parent_column_id 

有他們的100S :(

是否有任何「安全」的方式重命名所有未命名的默認限制到一個專有名稱,使他們不認爲'未命名',並沒有得到在任何環境中的隨機名稱?

我想擴大上面的查詢和生成sp_rename語句。由於我正在處理生產數據庫,我想要d找到最安全的方法。

解決此問題的最可靠和最安全的方法是什麼?

+0

去吧,生成那些重命名語句。 – Hogan

回答

1

這裏重新命名它是爲我工作的腳本:

select 
    CONCAT 
    (
     'exec sp_rename ', 
     ' @objname = ''['+d.name+']''', 
     ' , @newname = ''DF_',t.name,'_',c.name, '''', 
     ' , @objtype = ''OBJECT'' ;' 
    ), 
    t.name, c.name, d.name, definition 
from 
    sys.tables t 
join  
    sys.default_constraints d on d.parent_object_id = t.object_id 
join  
    sys.columns c on c.object_id = t.object_id  
        and c.column_id = d.parent_column_id 
ORDER BY t.name 

只需粘貼結果的第一列放入一個新的查詢窗口,用BEGIN TRANSACTIONROLLBACK環繞它進行測試。

0

可以使用sp_rename使用@objtype = 'OBJECT'

這部作品在sys.objects中列出的對象,其中包括限制