/ / Gostaria de saber como em vez de disparador de ATUALIZAR com junção interna na tabela inserida Works - sql, sql-server, sql-server-2008

Gostaria de saber como em vez de disparador de ATUALIZAR com junção interna em tabelas inseridas Works - sql, sql-server, sql-server-2008

Abaixo está um gatilho em uma atualização define oUPDATE_TS para CURRENT_TIMESTAMP. O gatilho funciona com sucesso, mas gostaria de saber como funciona. Meu entendimento é que a tabela inserida contém todos os registros inseridos.

Minhas perguntas: 1) Eu não entendo como a junção interna que estou usando aqui sabe selecionar os itens que estão sendo inseridos? Quais itens estão contidos na tabela inserida no momento em que esse gatilho está em execução,

2) como posso ver o conteúdo da tabela inserida no momento da execução?

3) E qual tabela estou fazendo uma junção interna na tabela inserida com?

CREATE TRIGGER my_table_update_ts_trigger
ON [mydatabase].dbo.[MY_TABLE]
INSTEAD OF UPDATE
AS
UPDATE t SET
ANOTHER_TABLE_ID = i.ANOTHER_TABLE_ID,
FREE_TEXT= i.FREE_TEXT,
UPDATE_TS = CURRENT_TIMESTAMP,
CREATE_USER = i.CREATE_USER,
UPDATE_USER = i.UPDATE_USER
FROM [dbo].MY_TABLE AS t
INNER JOIN inserted AS i
ON t.MY_TABLE_ID = i.MY_TABLE_ID

Respostas:

1 para resposta № 1

A lógica é bem direta:

Sql Server preenche tabelas temporárias inseridas e excluídas no tempdb com linhas que são "tocadas" pela instrução. Essas tabelas têm a mesma estrutura da tabela original.

  • Em um gatilho para INSERIR, você tem todos os novos registros em inserido mesa
  • Em um gatilho para EXCLUIR, todos os registros foram excluídos deletado mesa
  • Em um gatilho para ATUALIZAR, você tem os dois: registros antigos em deletado (valores antigos), novos registros inserido (novos valores).

Quando você entra na sua tabela com inseridos ou excluídos, você deve fazer a junção nos campos pk (MY_TABLE_ID no seu exemplo), mas você pode usar quaisquer outras colunas se tiver que atualizar outra tabela.

O importante é lembrar que existemvários registros nas pseudo tabelas inseridas e excluídas: todos os registros modificados (inseridos, excluídos ou atualizados) pelo seu extrato. Por exemplo, se você fizer um simples (exemplo bobo apenas para a explicação):

UPDATE MyTable SET MyField = MyField

sem nenhuma ONDE cláusula, você está atualizando todos os registros em sua tabela e toda a tabela será copiada para tabelas inseridas e excluídas e acessível para o seu gatilho.

Vejo Aqui

inseridos e excluídos são tabelas virtuais gerenciadas pelo Sql, você não tem acesso a elas.

Note também que desde que você está usando um AO INVÉS DE gatilho, o Sql não atualizará nenhuma linha, mas simde executar a instrução UPDATE inicial, o Sql executará o código do seu gatilho, portanto, você terá que executar o UPDATE no gatilho e poderá atualizar uma tabela diferente, em vez da original.

Se você estivesse usando um gatilho AFTER, o Sql teria feito a atualização inicial e chamado seu código de gatilho.