2012-02-07 16 views
0

私はを使用して子/親関係を作成するテーブルをsqlに持っています。ここには正確なスキーマがあります:SQL Serverで組み合わせごとに1つのレコードを持つルールを強制的に実行する

id int primary key identity(1,1) 
name nvarchar(max) 
parent int 

私は同じ親で正確に1つの名前を持ちたいと思います。親1の別の言葉には1つの名前しかなければなりません。その名前が別のレコードに表示される場合は、別の親を持つ必要があります。どのように私はt-sqlでこれを行うことができますか?

+0

を提供します。私は後で詳しく説明する時間があるかどうかを見ます。 – Stu

+0

場合によっては、ここから始めてください:http://msdn.microsoft.com/en-us/library/ms189799.aspx – Stu

+0

私はトリガーを避けるでしょう。あなたはチェック制約を使うことができます。 –

答えて

4

私はあなたがユニークな制約を求めていると思います。これにより、データがテーブル全体で一意でなければならないが、主キーの一部ではない列の組み合わせを定義できます。

SQL Serverを使用していますか?その場合は、これらの二つの記事が役立つはずです:

概要:http://msdn.microsoft.com/en-us/library/ms191166.aspx

を変更/作成:http://msdn.microsoft.com/en-us/library/ms177420.aspx

編集あなたはトリガーを記述する必要があります例に

ALTER TABLE [YourTable] 
ADD CONSTRAINT [YourConstraint] UNIQUE NONCLUSTERED ([name], [parent]) 
+0

これらのリンクは、1つの列にユニーク制約を作成する方法のみを示しています。どのようにして結合制約を作成できますか? – jim

+0

はい、カンマで区切ります。更新された回答を参照してください。また、UIで行うこともできます。 –

1

(親、名前)にユニークなインデックスを作成できます。

+0

2つの列に一意制約を作成するにはどうすればよいですか?私はこれが可能だと聞いたことがあるが、私は例を見たことがない。 – jim

関連する問題