2つのテーブルがあります.1つはカラムaccountid, category, code, name, desc
、もう1つはカラムid, accountid, code, reason, desc, active
です。SQL Serverのwhere句での外部キー制約
第2のテーブルのcode
には、という条件の最初のテーブルにあるcode
という値だけが含まれるような制約を作成する方法はありますか?
2つのテーブルがあります.1つはカラムaccountid, category, code, name, desc
、もう1つはカラムid, accountid, code, reason, desc, active
です。SQL Serverのwhere句での外部キー制約
第2のテーブルのcode
には、という条件の最初のテーブルにあるcode
という値だけが含まれるような制約を作成する方法はありますか?
ALTER TABLE table2 WITH CHECK
ADD CONSTRAINT CK_table2category CHECK (category = 'somevalue'),
CONSTRAINT FK_table2code FOREIGN KEY (code) REFERENCES table1 (code);
これは動作していません。SQL Serverはwhere句 –
'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' –
私は上記を試しても失敗しました –
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);
'category + code'が参照先テーブルで一意でないとうまくいかないと思います。ただし、一意性を保証するために、親テーブル 'PK inを投げることはできますが(もちろん、それが存在すると仮定します)。 @ RoogWolf。 –
。 。値が一意でない場合は、外部キーを使用できませんでした。 –
が依存あなたのデータベースエンジン – FuzzyTree
それはどういう意味ですか? (私はSQL Server(ssms)の初心者です) –
あなたが使用しているデータベースにタグを付けてください。 –