Observando outros exemplos, eu vim com o seguinte, mas não parece funcionar como eu gostaria: Eu quero que ele atualize apenas as informações modificadas se o QtyToRepair
valor tiver sido atualizado ... mas não funciona aquele.
Se eu comentar o onde, as informações modificadas serão atualizadas em todos os casos. Como disse outros exemplos me levaram a ser otimista. Quaisquer pistas são apreciadas. Obrigado.
Walter
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
ON [dbo].[SCHEDULE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE SCHEDULE SET modified = GETDATE()
, ModifiedUser = SUSER_NAME()
, ModifiedHost = HOST_NAME()
FROM SCHEDULE S
INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
WHERE S.QtyToRepair <> I.QtyToRepair
END
sql
sql-server
triggers
Walter de Jong
fonte
fonte
update()
- ele apenas testa se a coluna aparece na lista de atualização e é sempre verdadeiro para inserções. Não verifica se o valor da coluna foi alterado, porque você pode ter mais de uma linha, onde alguns valores foram alterados e outros não.Respostas:
Você tem dois caminhos para sua pergunta:
1- Use o comando Update em seu Trigger.
2- Use a união entre a tabela inserida e a tabela excluída
Ao usar o comando de atualização para a tabela
SCHEDULE
e definir aQtyToRepair
coluna com o novo valor, se o novo valor for igual ao valor antigo em uma ou várias linhas, a solução 1 atualiza todas as linhas atualizadas na tabela de programação, mas a solução 2 atualiza apenas as linhas de programação cujo valor antigo não é igual ao novo valor.fonte
inserted
tabela na segunda consulta? deve ser igual à própria mesa, não é?fyi O código que terminei com:
fonte
WHERE S.QtyToRepair <> I.QtyToRepair AND D.QtyToRepair <> I.QtyToRepair
nunca disparar / corresponder, pois o primeiro critério nunca foi verdadeiro - a tabela inserida sempre correspondeu ao valor real da tabela. Usar `WHERE I.QtyToRepair <> D.QtyToRepair` foi a chave para mim. Também aIF UPDATE (field)
ajuda de vários disparos de gatilhos.Deve-se verificar se
QtyToRepair
é atualizado em primeiro lugar.fonte
Você deseja fazer o seguinte:
Observe que esse acionador será disparado sempre que você atualizar a coluna, independentemente de o valor ser o mesmo ou não.
fonte
Sempre que um registro é atualizado, um registro é "excluído". Aqui está meu exemplo:
Funciona bem
fonte