Wie zu emulieren einen BEFORE INSERT-trigger in T-SQL / SQL Server für super/subtype (Erbschaft) Personen?

Dies ist auf Azure.

Habe ich ein Supertyp-Entität und mehrere Subtyp Entitäten, von denen die letztere braucht, um Ihr die Fremdschlüssel aus den primären Schlüssel des super-Typs entity auf jedem einfügen. In Oracle, verwende ich eine BEFORE INSERT auslösen, dies zu erreichen. Wie würde man dies in 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)
);

Wünsche ich mir eine insert into - sub1 für das auslösen eines trigger, der tatsächlich fügt einen Wert in super und nutzt die super_id generiert, um in sub1.

In Oracle würde dies erreicht werden, indem die folgenden:

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;

Bitte beraten, wie ich dies simulieren, die in T-SQL, gegeben, dass T-SQL fehlt die BEFORE INSERT - Fähigkeit?

InformationsquelleAutor der Frage Matthew Moisen | 2013-03-17

Schreibe einen Kommentar