背景:某些默认的列约束是在没有显式名称的情况下生成的,因此我们得到的有趣的名称因服务器而异,例如: DF__User__TimeZoneIn__5C4D869D
我希望使用一致的命名方式来管理它们,DF_Users_TimeZoneInfo
以便我们可以确保将来的目标表上存在适当的约束(例如在RedGate比较中,甚至只是在视觉上)
我有一个脚本,该脚本通常可以满足我的需求:
select 'sp_rename N''[' + s.name + '].[' + d.name + ']'',
N''[DF_' + t.name + '_' + c.name + ']'', ''OBJECT'';'
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
join sys.schemas s
on t.schema_id = s.schema_id
WHERE d.NAME like 'DF[_][_]%'
但这只是给我一个结果集,而不是我可以实际传递给exec或其他东西的东西。
如何做到这一点,这样我就可以执行那些sp_rename
脚本,而不必复制所有返回的元素并将它们粘贴到新的查询窗口中并再次运行它们?尝试保存尽可能多的击键,以便在许多环境中都可以解决此问题。
<facepalm>您应该在前几天问我有关此问题的信息-我从确实具有此功能的脚本中获取了答案。:)
—
乔恩·塞格尔
@JonSeigel好的,围绕此级别的指示如何在几个数据库中的每个数据库上运行一次?:D
—
jcolebrand
不要在新名称前加上方括号-运行此脚本后,我
—
感到非常痛苦