2017-08-04 20 views
0

2つのテーブルがあります.1つはカラムaccountid, category, code, name, desc、もう1つはカラムid, accountid, code, reason, desc, activeです。SQL Serverのwhere句での外部キー制約

第2のテーブルのcodeには、という条件の最初のテーブルにあるcodeという値だけが含まれるような制約を作成する方法はありますか?

+0

が依存あなたのデータベースエンジン – FuzzyTree

+0

それはどういう意味ですか? (私はSQL Server(ssms)の初心者です) –

+0

あなたが使用しているデータベースにタグを付けてください。 –

答えて

0
ALTER TABLE table2 WITH CHECK 
    ADD CONSTRAINT CK_table2category CHECK (category = 'somevalue'), 
     CONSTRAINT FK_table2code FOREIGN KEY (code) REFERENCES table1 (code); 
+0

これは動作していません。SQL Serverはwhere句 –

+0

'ALTER TABLE [dbo]の近くにエラーをスローしています。[StatusReason] NOCHECK ADD CONSTRAINT WITH [CK_StatusReason_ValueItem] CHECK([Category] ​​= 'Status 「)、 CONSTRAINT [FK_StatusReason_ValueItem] FOREIGN KEY(【のStatusCode])REFERENCES [DBO]。[ValueItem]([コード]) GO ALTER TABLE [DBO]。[StatusReason]チェック制約[CK_StatusReason_ValueItem]、[FK_StatusReason_ValueItem] GO' –

+0

私は上記を試しても失敗しました –

1

1つの方法は少しトリックです。まず、最初のテーブルに(category, code)に一意のインデックスを作成します。

alter table table2 add category as ('somevalue') persisted; 

が次に外部キー関係を作成します:

create unique index unq_table1_category_code on table1(category, code) 

次に表2で計算列を作成

alter table table2 add constraint fk_somevalue_code 
    foreign key (category, code) references table1(category, code); 
+0

'category + code'が参照先テーブルで一意でないとうまくいかないと思います。ただし、一意性を保証するために、親テーブル 'PK inを投げることはできますが(もちろん、それが存在すると仮定します)。 @ RoogWolf。 –

+0

。 。値が一意でない場合は、外部キーを使用できませんでした。 –