背景:デフォルトの列制約の一部は明示的な名前なしで生成されたため、次のようにサーバーごとに異なる楽しい名前が付けられます。 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>先日、このことについて質問されたはずです-これを正確に行うスクリプトから私の答えを引き出しました。:)
—
Jon Seigel 2013年
@JonSeigelわかりました。これを回避するために、いくつかのdbのそれぞれで1回実行する程度のインデククションはどうでしょうか。:D
—
jcolebrand
新しい名前の前後に角かっこを付けないでください。このスクリプトを実行した後、私は結局傷ついた世界になりました:)
—
samjudson