Это на Azure.
У меня есть объект супертипа и несколько сущностей подтипа, последний из которых должен получить свои внешние ключи из первичного ключа сущности супер-типа на каждой вставке. В Oracle я использую триггер BEFORE INSERT
для выполнения этого. Как это сделать в SQL Server/T-SQL?
DDL
CREATE TABLE super (
super_id int IDENTITY(1,1)
,subtype_discriminator char(4) CHECK (subtype_discriminator IN ('SUB1', 'SUB2')
,CONSTRAINT super_id_pk PRIMARY KEY (super_id)
);
CREATE TABLE sub1 (
sub_id int IDENTITY(1,1)
,super_id int NOT NULL
,CONSTRAINT sub_id_pk PRIMARY KEY (sub_id)
,CONSTRAINT sub_super_id_fk FOREIGN KEY (super_id) REFERENCES super (super_id)
);
Я хочу вставить в sub1
, чтобы запустить триггер, который фактически вставляет значение в super
, и использует super_id
, сгенерированный для размещения в sub1
.
В Oracle это будет выполнено следующим образом:
CREATE TRIGGER sub_trg
BEFORE INSERT ON sub1
FOR EACH ROW
DECLARE
v_super_id int; //Ignore the fact that I could have used super_id_seq.CURRVAL
BEGIN
INSERT INTO super (super_id, subtype_discriminator)
VALUES (super_id_seq.NEXTVAL, 'SUB1')
RETURNING super_id INTO v_super_id;
:NEW.super_id := v_super_id;
END;
Пожалуйста, сообщите, как я смоделировал это в T-SQL, учитывая, что T-SQL не имеет возможности BEFORE INSERT
?