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