ホームページ > データベース > mysql チュートリアル > SQL Server 2008 R2 チェック制約でサブクエリを使用するにはどうすればよいですか?

SQL Server 2008 R2 チェック制約でサブクエリを使用するにはどうすればよいですか?

DDD
リリース: 2025-01-03 18:20:39
オリジナル
624 人が閲覧しました

How Can I Use Subqueries in SQL Server 2008 R2 Check Constraints?

チェック制約のサブクエリ: 回避策

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 サイトの他の関連記事を参照してください。

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