ホームページ > データベース > mysql チュートリアル > スカラー値関数は SQL Server チェック制約のサブクエリ制限をバイパスできますか?

スカラー値関数は SQL Server チェック制約のサブクエリ制限をバイパスできますか?

DDD
リリース: 2025-01-04 14:06:39
オリジナル
225 人が閲覧しました

Can Scalar-Valued Functions Bypass Subquery Restrictions in SQL Server Check Constraints?

チェック制約のサブクエリ機能

チェック制約でのサブクエリの使用は、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート