这是在 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)
);
我希望 insert intosub1
触发一个触发器,该触发器实际上将一个值插入super
并使用super_id
生成的 put into 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
能力?