Welcome to Sign in | Help

Re: dm triggers fire

  •  04-26-2012, 2:46 PM

    Re: dm triggers fire

    B_gd_n[ ]Sahlean:
    crestinul:
    Trigggerul dml de update sa se declanseze pentru fiecare rand sau o singura data la nivel de statmenent se poate configura asta?
    Multumesc


    Triggeri DML sunt la nivel de statement. În sintaxa comenzii CREATE TRIGGER din T-SQL (SQL Server) nu există nici un element care să permită configurarea modului de activare a triggerilor așa cum există FOR EACH ROW în MySQL (doar la nivel de row - conform documentației) sau ORACLE (la nivel de statement sau row - conform documentației). În plus, syntaxa T-SQL folosită de către Sybase Anywhere/ASE include sintaxa [ FOR  EACH  { ROW  | STATEMENT  } ].

    Un test demonstrează comportamentul serverului în acest caz:
    CREATE TABLE TestTrigger
    (
        Id INT IDENTITY PRIMARY KEY,
        Col1 INT NOT NULL,
        Col2 VARCHAR(20) NULL
    );
    GO

    CREATE TRIGGER trg_IUD_TestTrigger
    ON TestTrigger
    AFTER INSERT, UPDATE, DELETE
    AS
    BEGIN
        SELECT    i.Id AS inserted_id, i.Col1 AS inserted_Col1, i.Col2 AS inserted_Col2
        FROM    inserted i;

        SELECT    i.Id AS deleted_id, i.Col1 AS deleted_Col1, i.Col2 AS deleted_Col2
        FROM    deleted i;
    END;
    GO
    --TRUNCATE TABLE TestTrigger
    PRINT '--Test 1--';
    INSERT    TestTrigger(Col1, Col2)
    VALUES    (11, 'A');

    PRINT '--Test 2--';
    INSERT    TestTrigger(Col1, Col2)
    SELECT    22, 'B'
    UNION ALL
    SELECT    33, 'C';

    PRINT '--Test 3--';
    UPDATE    TestTrigger
    SET        Col2 = NULL;

    --Rezultate
    --Test 1--
    inserted_id inserted_Col1 inserted_Col2
    ----------- ------------- --------------------
    1           11            A
    deleted_id  deleted_Col1 deleted_Col2
    ----------- ------------ --------------------

    --Test 2--
    inserted_id inserted_Col1 inserted_Col2
    ----------- ------------- --------------------
    3           33            C
    2           22            B
    deleted_id  deleted_Col1 deleted_Col2
    ----------- ------------ --------------------

    --Test 3--
    inserted_id inserted_Col1 inserted_Col2
    ----------- ------------- --------------------
    3           33            NULL
    2           22            NULL
    1           11            NULL
    deleted_id  deleted_Col1 deleted_Col2
    ----------- ------------ --------------------
    3           33           C
    2           22           B
    1           11           A





    Multumesc.Eu cred ca e o limitare asta cel putin fata de pl sql unde iti poti defini triggeri la nivel de rand,dupa cum ziceai si tu...
    Secolul XXI ori va fi religios ori nu va fi deloc
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems