2017-01-25 19 views
1

"タイプ"が0の場合、テーブルBに人を追加することができますが、そうでない場合は "タイプ"の列がテーブルBにないはずです。 enter image description here複数のテーブルのSQLチェック制約

+0

'代わりにトリガーof'私は基本的に'変更テーブルの上にTableBの制約fk_tableA_type_person 外部キー(type_for_a、人を追加...少し混乱しましたあなた –

答えて

0

これは、外部キー制約といくつかのトリッキーで行うことができます。 typepersonの両方のためにTableAにユニーク制約を設定

まず、:

alter table TableA add constraint unq_TableA_type_person on TableA(type, person); 

これは、あなたがセット外部キー制約を設定することができます。ただし、type列が必要です。

alter table TableB add constraint fk_tableA_type_person 
    foreign key (type_for_a, person) references tableA(type, person); 

出来上がり:

alter table TableB add type_for_a as (0); -- it is always 0 

は今、ちょうど外部キー制約を使用します。そのためには、計算列を使用することができます!コードを記述する必要はありません。

+0

に役に立つかもしれません)は、tableA(型、人)を参照します。 'コードの一部です。私は2つの列を持つ外部キーを作成していますか? – bethe

+0

は、もっと単純なidk ... '擬似コード'の場合は、セルX = 0の場合はそれを入れ、それ以外の場合は使用しないようにしてください。 – bethe

+0

"タイプ"は存在しません。他のテーブル – bethe

0
CREATE TABLE T1 (TypeID INT NOT NULL, people VARCHAR(50)); 
GO 
CREATE TABLE T2 (people VARCHAR(50)); 
GO 


-- creating trigger to insert on the behalf when there is a particular type 
CREATE TRIGGER dbo.AfterInsertTrigger 
    ON T1 
    AFTER INSERT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    declare @id int, 
    @someval char(1) 
    insert into dbo.T2 
    select i.people FROM Inserted i 
    where i.TypeID=0 -- checks only when the id is 0 
END 
GO 

-- inserting people with different id s into Table1 
INSERT T1 (TypeID, people) SELECT 1, 'A'; 
INSERT T1 (TypeID, people) SELECT 0, 'B'; 
GO 

--selecting from tables see what got affected. 
select * from T1 
select *from T2 

enter image description here

--Clean up 
    DROP TABLE T2; 
    DROP TABLE T1; 
    GO 
+0

少し説明が役に立ちます:) – bethe

+0

@bethe、これが理にかなっているかどうか教えてください。 –

+0

私の場合、FKIDはT2に存在してはいけません – bethe