チェック制約のサブクエリ機能
チェック制約でのサブクエリの使用は、SQL-Server 2008 R2 の長年の制限でした。この記事では、この問題を調査し、スカラーを返す関数を使用した代替解決策を提供します。
問題:
サブクエリを使用して別のテーブルに対して列の値を検証しようとしたときチェック制約では、次のエラーが発生します。「このコンテキストではサブクエリは許可されません。スカラー式のみが可能です」 "
背景:
チェック制約は、テーブルに挿入または更新される各行に対して式を評価することにより、データベースの整合性を強制するために使用されます。通常、これらの式はサブクエリではなくスカラー操作で構成されます。
解決策:
この制限を回避するには、必要な処理をカプセル化するカスタムのスカラーを返す関数を作成できます。サブクエリ。この関数は、サブクエリ条件が満たされているかどうかを示すスカラー値を出力する必要があります。
例:
列 'MyField' を持つ 'Table1' というテーブルがあるとします。これは「Table2」というテーブルに対して検証する必要があります。次のように 'myFunction' という関数を作成できます:
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
関数の適用:
'myFunction' はチェック制約で次のように使用できます。
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (myFunction(MYFIELD) = 'True')
これは、チェック内のサブクエリの機能を効果的にエミュレートします。 constraint.
結論:
サブクエリをチェック制約で直接使用することはできませんが、スカラーを返す関数を使用して目的の検証を実現できます。この回避策により、データベースの整合性を損なうことなく、より複雑なデータ検証シナリオが可能になります。
以上がスカラー値関数は SQL Server チェック制約のサブクエリ制限をバイパスできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。