SQL Server 2008 R2 で、次のようなサブクエリを使用してチェック制約を定義しようとします。
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (MyField in (Select Field From Table2))
この場合、サブクエリが許可されていないことを示すエラーが発生しますcontext.
トリガーなしでこの検証を実現するには、サブクエリをカプセル化するスカラー関数を作成し、チェック制約内で使用できます。以下に例を示します。
CREATE FUNCTION myFunction( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT * FROM Table2 WHERE MYFIELD = @field) RETURN 'True' RETURN 'False' END
関数を定義したら、次のようにチェック制約で使用できます。
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (myFunction(MYFIELD) = 'True')
関数によって返されたスカラー値を特定の文字列 (例: 「True」) と照合することで、目的の検証が行われます。チェック制約内で直接サブクエリを必要とせずに適用されます。
以上がSQL Server チェック制約でサブクエリを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。