Welcome to Sign in | Help

Re: dm triggers fire

  •  04-25-2012, 11:35 AM

    Re: dm triggers fire

    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



View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems