データベースを一時的に無効な状態にする可能性のあるデータベースへの変更を含むスクリプトを使用しています。現在、最初にすべての制約を無効にしてから、スクリプトの最後で次のコードを使用して再度有効にします。
/*** Disable all constraints ***/
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"
/*** Enable all constraints ***/
EXEC sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all"
しかし、これはnull制約を無効にしません。私が読んだことから、null制約はFK制約とは異なる方法で扱われることがわかったからです。
すべてのテーブルを変更して null を許可し、スクリプトの最後で再度変更する必要があると思います。
その情報がないため、テーブルの名前を「ハードコード」することはできません。そのため、次のような多くのステートメントを実行できません。
ALTER TABLE someTable ALTER COLUMN someColumn INT NULL
動的である必要があります。どうすればこれを達成できるかについてのアイデアはありますか?
編集:
私が処理できないシナリオの 1 つは、新しい非 null 列を既存のテーブルに追加することです。この列を追加するスクリプトを制御できません (自動化されたツールによって作成されます)。作成されたスクリプトはALTER TABLE someTable ADD someColumn INT NOT NULL
、このステートメントの後に削除/挿入/更新が発生しsomeTable
て有効な状態になりますが、エラーが発生しますALTER
声明について