2016-08-17 15 views
0

製品:SQL Server他の列をチェックするSQL Serverの制約

他の列の値をチェックする制約を記述することはできますか?私の特定のケースで私はあなたの例を与える:

はのは、私は5列を持つテーブルを持っている想像してみましょう:

Name | Hobby1 | Hobby2 | Hobby3 | Hobby4 

は、その中に次の値があるとしましょう:

John Doe| fishing | reading| swimming| jogging 

何私は以下に到達しようとしています: 誰かが挿入しようとした場合:ジョンDoe、釣り、読書

それはブロックする必要があります、私は同じ共同したくない最初の3つの列の中にある。

制約がある場合、または最初の3つの列にプライマリキーの組み合わせが必要なことは分かりますか?

返信いただきありがとうございます。

+3

悪い表のデザイン。 1つの趣味の列と複数の行を代わりに持ちます。 – jarlh

+2

あなたがより良いデザインを考えることができますが、ユニークであると言及している3つのカラムを持つユニークなコンストレイントを作成してください。 –

+0

それは問題を簡素化することだけだった、私はDBのようなテーブル構造を持っていない。お返事をありがとうございます! – Hawtinjr

答えて

1

テーブルに最初の3つの列に対してユニーク制約を追加します。

ALTER TABLE YourTableName 
ADD CONSTRAINT UK_Name_Hobby1_Hobby2 UNIQUE (Name, Hobby1,Hobby2); 
+0

こんにちは、お返事ありがとうございます。 3番目の列にNULLSがある場合はどうなりますか?私はこれを克服できますか?John Doe、釣り、NULL; John Doe、釣り、NULLは受け入れられますか? – Hawtinjr

+0

一意の制約は一度nullを許可します – StackUser

-1

さて、あなたは@jarlhが言うように(コメントで)行うと趣味の列が発注されていることを確認し、これはあなたの要件を満たすことができます:

CREATE TABLE Hobbies 
(
Name VARCHAR(35) NOT NULL, 
Hobby1 VARCHAR(35) NOT NULL, 
Hobby2 VARCHAR(35) NOT NULL, 
Hobby3 VARCHAR(35), 
Hobby4 VARCHAR(35), 
CHECK (Hobby1 < Hobby2), 
CHECK (Hobby2 < Hobby3), 
CHECK (Hobby3 < Hobby4), 
UNIQUE (Name, Hobby1, Hobby2), 
); 

...しかし、これは許しますそれは無効なデータでなければならないと感じている:

INSERT INTO Hobbies VALUES ('John Doe', 'fishing', 'jogging', 'reading', 'swimming'); 
INSERT INTO Hobbies VALUES ('John Doe', 'jogging', 'reading', 'swimming', NULL); 
関連する問題