Tabelas Mágicas no SQL Server

Tabelas Mágicas no SQL Server

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Existem tabelas mágicas (tabelas virtuais) no SQL Server que contêm as informações temporais dos dados inseridos e excluídos recentemente na tabela virtual. INSERTED e DELETED são dois tipos de tabelas mágicas no SQL Server. Uma tabela mágica INSERTED é preenchida com operações INSERT e UPDATE e tabela mágica DELETED é preenchida com operações UPDATE e DELETE.

A tabela mágica INSERTED armazena a versão anterior da linha e a tabela DELETED armazena a versão posterior da linha para qualquer operação INSERT, UPDATE ou DELETE.

Uma tabela mágica pode ser utilizada nas atividades INSERT, UPDATE e DELETE com a tabela em um gatilho, que é o entendimento comum das pessoas. O SQL Server também usa tabelas mágicas fora do TRIGGER para muitos outros fins. O uso de tabelas mágicas no SQL Server com a instrução de atualização usual diminui a dependência de informações e torna suas informações consistentes com sua transação.

INSERIR: A tabela mágica INSERTED terá as linhas recém-inseridas na parte superior da tabela com uma operação de inserção. Pode ser usado para gerenciar uma auditoria da tabela em outra tabela do histórico.

EXCLUIR: A tabela mágica DELETED terá as linhas excluídas recentemente na parte superior da tabela com uma operação de exclusão. Ele pode ser usado para gerenciar uma versão anterior da linha para fins de auditoria na tabela de histórico.

ATUALIZAR: As tabelas virtuais INSERTED e DELETED farão parte de uma instrução de atualização. A instrução Update retorna a tabela mágica excluída com a versão anterior da linha e a tabela mágica inserida com a nova versão de uma linha, que será substituída ou atualizada pelos valores anteriores da tabela. O importante é que sempre que os usuários executam a instrução de atualização dentro ou fora do gatilho, tabelas mágicas INSERTED e DELETED estão sendo usadas.

Tabelas mágicas inseridas e excluídas no SQL Server

Um uso comum das tabelas Magic no SQL Server é o gatilho DML (Data Manipulation Language). O gatilho DML do SQL Server permite usar essas duas tabelas virtuais INSERTED e DELETED. O uso ideal do acionador é auditar e gerenciar uma versão anterior e posterior da linha da tabela nas operações INSERT, UPDATE ou DELETE na instrução de transação. Até os usuários podem escrever a lógica de manipulação de dados também com essas tabelas mágicas dentro do gatilho.

Uma tabela mágica é armazenada no banco de dados temp. Portanto, sempre que você usar as tabelas mágicas no SQL Server com a instrução de consulta, o tempdb aparecerá na figura.

Sempre que a tabela mágica estiver utilizando uma instrução de consulta na transação, o tempdb será afetado por essa instrução. Abaixo estão as limitações da tabela mágica comparadas com a tabela temporária real (# table)

Leia Também  Introdução ao Gremlin - SQLServerCentral

  • Os usuários não podem criar nenhum índice ou aplicar qualquer restrição nas tabelas mágicas no SQL Server

  • Eles não podem ser alterados porque o objetivo da tabela mágica é auditar as informações no sistema

Como usar tabelas mágicas no gatilho?

A manipulação de dados com a tabela mágica é muito útil no gatilho para auditoria de informações. Os usuários podem usar operações de junção com as tabelas mágicas no SQL Server e compor uma lógica de negócios também. Por exemplo, um gatilho para verificar se uma operação de atualização é executada em alguma coluna específica ou não? Se isso aconteceu, execute as instruções necessárias para executar essas tarefas.

Tabelas mágicas no gatilho do SQL Server

Aqui, uWorkOrder gatilho existe dentro do WorkOrder tabela no banco de dados de prática da Microsoft (AdventureWorks) Os usuários podem gravar gatilhos com lógica baseada em condições com a ajuda do ATUALIZAR() função. ATUALIZAR() A função refere-se à operação de atualização executada ou não na coluna específica, que está sendo usada na função UPDATE () dentro do gatilho. Inseridas e excluídas são as tabelas mágicas no gatilho do SQL Server que costumavam gerenciar as linhas pré-atualizadas e pós-atualizadas.

A tabela virtual (Tabela Mágica) será removida do tempdb assim que uma transação for concluída. No código de exemplo acima, estamos inserindo as duas versões de linha (anteriores e atuais) em outra tabela de auditoria.

Atualizar tabela com o retorno de uma linha atualizada usando tabelas mágicas no SQL Server

Uma tabela mágica também pode ser acessada fora do gatilho DML. A maioria dos desenvolvedores não conhece essa utilização de uma tabela mágica com uma declaração de atualização. Por exemplo, quando um usuário deseja retornar linhas atualizadas com a instrução update. Um desenvolvedor primeiro atualizará uma linha e retornará essas linhas aplicando um filtro, quaisquer que sejam os filtros aplicados anteriormente com a instrução update na tabela. No entanto, ele pode retornar linhas sujas, porque essas linhas também podem ser atualizadas por outra transação.

No segundo caso, os usuários buscam e armazenam essas linhas atualizáveis ​​na tabela temporária aplicando um filtro necessário em uma tabela, executam uma operação de atualização e retornam essas linhas da tabela temporária na mesma transação. Porém, inserindo essas linhas na tabela temporária e antes de concluir a instrução de atualização, enquanto isso, outra transação pode transportar essas linhas para a mesma atividade que será atualizada. Para superar essa declaração de problema e desafios, o usuário pode utilizar as tabelas mágicas no SQL Server com a instrução update, que retornará linhas excluídas (versão anterior) e inseridas (nova versão) com INSERTED e DELETED.

Por exemplo, você pode ver a tabela de amostra abaixo, [WorkOrder], com um filtro aplicado a ele.

Listando linha em uma tabela

Agora, atualize uma linha da tabela e busque essas linhas com o uso de uma tabela mágica e (#) tabela temporária.

Versão Post Row com tabelas mágicas no SQL Server

No exemplo de consulta T-SQL acima, uma tabela mágica INSERTED retornará o valor recém-inserido e o transportará para a tabela #order temp. No entanto, não estamos atualizando a coluna WorkOrderID, ProductID e StockedQty na instrução de consulta acima, mas a tabela virtual inserida também pode retornar outras colunas da tabela.

Aqui, uma tabela mágica INSERTED é usada para retornar uma linha atualizada. O valor recém-atualizado da coluna pode retornar na resposta com a ajuda do parâmetro OUTPUT na mesma instrução. Até os usuários podem retornar versões anteriores de linhas atualizadas também com a ajuda da tabela mágica DELETED na mesma instrução T-SQL.

Por exemplo,

Versão pré e pós-linha com tabelas mágicas no SQL Server

Aqui, um valor recém-atualizado é 29, que é inserido na tabela temporária usando uma tabela mágica INSERTED e um alias de coluna com prev_OrderQty que retorna a versão anterior à atualização de uma linha com a ajuda de uma tabela mágica DELETED.

O cenário mais significativo é que, quando um usuário está atualizando (n) linhas usando a palavra-chave TOP (n) com a instrução UPDATE, e um usuário deseja essas linhas nos resultados da consulta, que são atualizados com a instrução UPDATE. Não temos escolha adequada para alcançá-lo, exceto as tabelas MAGIC no SQL Server. Se você estiver usando o nível READ UNCOMMITTED ISOLATION, os dois cenários retornarão uma leitura suja. Se você está buscando linhas com o nível READ COMMITTED ISOLATION, há chances de ocorrer um bloqueio com a transação.

Por exemplo,

Aqui, as linhas TOP (n) serão atualizadas na instrução UPDATE acima e essas linhas atualizadas serão inseridas na tabela temporária #OutTable. Aqui, uma tabela mágica com uma instrução de atualização resolve muitas dependências de dados. TOP (n) com uma instrução de atualização deve ser útil quando um aplicativo com vários threads seleciona a atividade de atualização de dados na tabela paralelamente. Qualquer um dos trabalhadores livres extrairá os registros (n) de uma tabela com uma atualização e processará essas linhas no lado do aplicativo. Mesmo as tabelas mágicas ajudam a diminuir o tempo de teste de código também nos cenários explicados acima.

Conclusão

O objetivo deste artigo não é apenas apresentar as tabelas mágicas (INSERTED e DELETED) em um gatilho, mas os usuários podem utilizá-lo fora do gatilho com uma declaração de atualização regular também.

Jignesh Raiyani
Últimas mensagens de Jignesh Raiyani (ver todos)

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br