使用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
其中有100个:(
有没有"安全"将所有未命名的默认约束重命名为正确名称的方法,以便他们不会考虑未命名的'并且不要在每个环境中获得随机名称?
我正在考虑扩展上面的查询并生成sp_rename
语句。由于我正在处理生产数据库,我想找到最安全的方法。
解决此问题的最可靠和最安全的方法是什么?
答案 0 :(得分:2)
以下是适用于我的脚本:
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
只需将结果的第1列粘贴到新的查询窗口中,然后使用BEGIN TRANSACTION
和ROLLBACK
将其包围以进行测试。
答案 1 :(得分:0)
您可以使用ItemType
PageType
重命名
这适用于sys.objects中列出的包含约束
的对象