2009-04-16 14 views
2

nullを許可するフィールドでconstraintを指定する方法はありますが、値が存在する場合、既存のテーブル内の主キーの値の1つである必要がありますか? コードを見てみましょう:同じテーブル内のRowParentIdの制約はありますか?

CREATE TABLE TestTable 
(
    RowId int IDENTITY NOT NULL PRIMARY KEY, 
    RowParentId int NULL, -- < how do I specify constraint that RowParentId if not NULL should be RowId (foreign key to existing table?) 
    RowName nvarchar(30), 
    RowShortName nvarchar(10) 
) 
GO 

私は深さを制限し、既存の親に制約を強制することなく、親、子ビューを生成することができるようにしたいです。

希望私は私が探しているものを伝えることができました。

乾杯

答えて

5

それは単なる外部キーではありませんか?

RowParentId int NULL references ParentTable (ParentTableIdColumn), 

nullでない場合は、親表の値である必要があります。それがインデックスによってsearcheableないよう欄にNULLを維持することは、悪い考えであることを

+0

正確に - より多くの何もないが、標準、実行の - ミル外部キー: - ) –

+0

ありがとうございます、私の場合は、ParentTableをTestTableに置き換えてください。 – krul

+0

あなたたちは速いです! –

0
ALTER TABLE TestTable 
ADD CONSTRAINT fk_testtable_parent 
FOREIGN KEY (RowParentId) 
REFERENCES TestTable(RowId) 

は注意してください。

id = 0のサロゲートレコードを追加し、実際のルートをこのレコードに参照し、それを選択から除外することをお勧めします。

0

同じテーブルに戻って参照する外部キー制約を持つことができます。あなたは階層のために他のモデルを見てみたいかもしれません。リンクされたチェーンモデルはSQLに多くの問題があります。 「Joe Celkoの階層」でGoogleを実行すると、階層をモデル化する他の方法に関する情報を見つけることができます。

0

外部キーを作成したいとします。そこにこれを行うには、いくつかの方法がありますが、このような単一のキーのための最も簡単な方法は、その列のworkld「ヌル」の後に、次を追加することです:

references table_name (column_name) 
あなたは外来語」を追加する必要があり

その前にキー "を覚えていない。いずれにせよ、それは世話をするべきです。

0

ALTER TABLE [DBO]チェックADD制約に.TestTable [FK_TestTable_RowId_TestTable_RowParentId] FOREIGN KEY(RowParentIdが)のTestTable(ROWIDを)を参照

関連する問題