0

2列のテーブルがあります

CREATE TABLE mytable
(
  x int
  y char(1)
)

xの値に関してyに制約を適用したいと思います。

たとえば、x = 5の場合、y ='a'にしたい、x = 12 y='b'の場合などです。SQL Server 2008で実行することは可能ですか?何かのようなもの

case when x = 5 then y='a' end

後者のステートメントは機能しないので、私はアナログを求めています。

4

3 に答える 3

1
CREATE TABLE mytable
(
  x int not null,
  y char(1) not null,
  constraint CK_mytable_myrules CHECK (
    1 = CASE
          WHEN x=5 AND y='a' THEN 1
          WHEN x=12 AND y='b' THEN 1
        /* More rules here */
          ELSE 0 END
)

CASEは、常にを返す必要があります。ブール値はSQLの一部ではありません。


または、一般的なルールが「これらのルールのいずれにも一致しない場合は、通過させる」の場合、ネストされたCASEまたは「フォールバック」ルール(私自身の、発明されたばかりの用語)の2つの選択肢があります。

ネストされたケース:

    1 = CASE
          WHEN x=5 THEN
             CASE WHEN y='a' THEN 1
                  ELSE 0 END
          WHEN x=12 THEN
             CASE WHEN y='b' THEN 1
                  ELSE 0 END
        /* More rules here */
          ELSE 1 END

または他の方法:

    1 = CASE
          WHEN x=5 AND y='a' THEN 1
          WHEN x=5 THEN 0
          WHEN x=12 AND y='b' THEN 1
          WHEN x=12 THEN 0
        /* More rules here */
          ELSE 1 END
于 2010-12-15T14:04:47.450 に答える
1

式を次のように設定できます。

( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' )

必要に応じてルールを追加してください...

このSQLを使用してテーブルに制約を追加します。

ALTER TABLE dbo.myTable WITH NOCHECK  
      ADD  CONSTRAINT CK_myTable
      CHECK  (( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' ));

その他の例については、このリファレンスを確認してください。

http://www.databasejournal.com/features/mssql/article.php/3811831/Using-Check-Constraints-to-Validate-Data-in-SQL-Server.htm

于 2010-12-15T14:09:37.277 に答える
0

このような制約を設定することは可能です。Cf. リンクテキスト 適切なUDFを定義する必要があります。

ああ、他の可能性もあるようです。

于 2010-12-15T14:08:44.797 に答える