チェック制約のサブクエリ: 回避策
SQL Server 2008 R2 では、チェック制約でサブクエリを使用すると、スカラーのみであることを示すエラー メッセージが表示されます。表現は許可されています。たとえば、次のコードは、データの挿入時に Table1 の列を Table2 の値と照合することを目的としています。
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (MyField in (Select Field From Table2))
エラーへの対処
この制限を回避するには、別のアプローチを検討してください:
1.関数の使用:
サブクエリを、値が他のテーブルに存在するかどうかを示すスカラー値 (True または False など) を返す関数に変換します。次に、チェック制約で関数を使用します。
例:
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
2.代替構文:
場合によっては、サブクエリを回避する代替構文を使用してチェック制約を書き換えることができます:
EXISTS の使用:
CHECK (EXISTS (SELECT* FROM Table2 WHERE MYFIELD = MyField))
IN を使用するサブ選択:
CHECK (MyField IN (SELECT Field FROM Table2))
3.外部キー制約:
テーブル間の関係が真の外部キー関係を表す場合、最も適切な解決策は外部キー制約を使用することです。これにより、参照整合性が強制され、データの一貫性が保証されます。
前述の回避策のいずれかを実装すると、関数の実装や代替構文の使用などの追加の考慮事項はありますが、チェック制約でサブクエリのような機能を利用できます。
以上がSQL Server 2008 R2 チェック制約でサブクエリを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。