Gatilho: como funciona a tabela inserida? Como acessar suas linhas?
tenho o seguinte quadro
Data --Table name
ID -- Identity column
PCode -- Postal Code
eu criei o seguinte gatilho:
CREATE TRIGGER Trig
ON Data
FOR INSERT
AS
BEGIN
Select * from inserted
END
e inseridos os seguintes valores
INSERT INTO Data VALUES (125)
INSERT INTO Data VALUES (126)
INSERT INTO Data VALUES (127)
mostra isto:
Mas estava à espera de algo assim:- após a primeira inserção, o gatilho é executado- > uma linha é apresentada na Tabela
inserted
. - após a segunda inserção, o gatilho é executado - > duas linhas são apresentadas na Tabela
inserted
. - Depois do 3º dia inserção, a activação é executada - > três linhas são apresentadas na Tabela
inserted
.
de acordo com msdn.microsoft todas as linhas inseridas estão nesta tabela.
Como posso aceder à tabela
inserted
para poder ver todas as linhas esperadas e não separadamente?
2 answers
A tabela inserida guarda cópias das linhas afectadas durante as instruções de inserção e actualização.
Isso significa que a tabela inserted
só conterá linhas para a actual Instrução INSERT
ou UPDATE
.
Se quiser ver todas as linhas para vários desses INSERT
ou UPDATE
, terá de guardar estas linhas numa tabela que criou se.
Há 2 Tabela disponível num trigger, no inserido e no suprimido. Cada atualização na tabela XXX é na verdade uma linha de delete X De XXX, em seguida, uma inserção da linha X na tabela XXX. assim, a inserida dentro do gatilho é uma cópia do que foi inserido. Você pode fazer muito com um gatilho, mas gatilhos são perigosos.
Por exemplo, num espectáculo, encontrei um SP enorme a ser executado por um gatilho, largámo-lo e a base de dados voltou a estar online. Ou outro exemplo, se você faz um gatilho errado para auditar logins, você pode descer o servidor.