制約を無効にしたり、有効にしたりしてみる
今回やることを説明してみる
各テーブルに設定されている制約を無効にしたり、有効にしたりしたいと思います。制約があると、都合が悪い時もありますよね?
使用する環境を説明してみる
私の Lenovo マシン上の SQL Server 2014 です。
実験してみる
AdventureWorks2014 の Purchasing.PurchaseOrderHeader テーブルで実験したいと思います。制約がかかるような更新を行うと下図のようになります。
上記のチェックがかからないようにするには、下記の DDL 文を実行します。
ALTER TABLE Purchasing.PurchaseOrderHeader NOCHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
上記の DDL 文実行後に、テーブルを更新します。更新できましたね。
制約を元に戻すには、下記の DDL 文を実行します。
ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT FK_PurchaseOrderHeader_Employee_EmployeeID;
テーブルに設定している制約をすべて外したい場合は、下記のように DDL 文を実行します。
ALTER TABLE Purchasing.PurchaseOrderHeader CHECK CONSTRAINT ALL;
応用してみる
データベースの全てのテーブルに関する制約を一気に無効化・有効化するには、undocumented なストアドを使用することで実現できますね。過去の記事を参照してみてください。
undocumented なものを見つけたので、調べてみる - その1 ( sp_MSforeachtable ) - - 都内で働くSEの技術的なひとりごと
undocumented なものを見つけたので、調べてみる - その2 ( sp_MSforeachtable と sp_MSforeach_worker ) - - 都内で働くSEの技術的なひとりごと
おわりに何か書いてみる
今日も記事書く暇がなく、早朝に書いていたりします。