Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Inserção de gatilho SQL de várias tabelas


Você não faz referência às tabelas inseridas ou excluídas que estão disponíveis apenas no gatilho, então é claro que você está retornando mais registros do que precisa em sua consulta.

Ao escrever um gatilho pela primeira vez, o que faço é criar uma tabela temporária chamada #inserted (e/ou #deleted) e preenchê-la com vários registros. Ele deve corresponder ao design da tabela em que o acionador estará. É importante fazer com que sua tabela temporária tenha vários registros de entrada que possam atender aos vários critérios que afetam sua consulta (portanto, no seu caso, você deseja alguns em que a contagem de casos seja 0 e outros não, por exemplo) e isso seria típico de dados inseridos na tabela ou init atualizado. Os gatilhos do SQL Server operam em conjuntos de dados, portanto, isso também garante que seu gatilho possa lidar adequadamente com várias inserções ou atualizações de registro. Um gatilho escrito corretamente teria casos de teste que você precisa testar para garantir que tudo aconteça corretamente, sua tabela #inserted deve incluir registros que atendam a todos esses casos de teste.

Em seguida, escreva a consulta em uma transação (e reverta enquanto você está testando) juntando-se a #inserted. Se você estiver fazendo um insert com um select, escreva apenas a parte select até acertar, então adicione o insert. Para testar, escreva uma seleção da tabela na qual você está inserindo para ver os dados inseridos antes da reversão.

Depois de fazer tudo funcionar, altere as referências #inserted para insert, remova qualquer código de teste e, claro, o rollback (possivelmente toda a transação dependendo do que você está fazendo.) e adicione a parte de soltar e criar gatilho do código. Agora você pode testar seu acionador como um acionador, mas está em boa forma porque sabe que é provável que funcione a partir de seus testes anteriores.