Sql server 如何正确重命名所有未命名的默认约束
使用SQL Server 2014:我正在处理一个大型生产数据库,其中包含许多未命名的默认约束 未命名的默认约束会导致许多问题,因为它们在我填充数据库模式填充脚本的每个“DEV”或“QA”环境中都会得到一个随机名称。随机默认约束名称导致SSDT架构比较/更新脚本失败 我需要正确地将生产数据库的默认列约束命名为正确的名称,以便在编写数据库架构脚本时,它们不会得到随机名称 我使用以下查询获取未命名默认约束的列表:Sql server 如何正确重命名所有未命名的默认约束,sql-server,Sql Server,使用SQL Server 2014:我正在处理一个大型生产数据库,其中包含许多未命名的默认约束 未命名的默认约束会导致许多问题,因为它们在我填充数据库模式填充脚本的每个“DEV”或“QA”环境中都会得到一个随机名称。随机默认约束名称导致SSDT架构比较/更新脚本失败 我需要正确地将生产数据库的默认列约束命名为正确的名称,以便在编写数据库架构脚本时,它们不会得到随机名称 我使用以下查询获取未命名默认约束的列表: select t.name, c.name, d.name, definit
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
语句。因为我处理的是生产数据库,所以我想找到最安全的方法
解决此问题最可靠和最安全的方法是什么?您可以使用
sp\u rename
使用@objtype='OBJECT'
这适用于sys.objects中列出的对象,其中包括约束以下是适用于我的脚本:
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列粘贴到一个新的查询窗口中,用
开始事务
和回滚
将其包围起来进行测试。继续,生成那些重命名语句。