Tenho um problema com o gatilho que produz a seguinte mensagem de erro
O gatilho retornou um conjunto de resultados e/ou estava sendo executado com SET NOCOUNT OF
O gatilho é estruturado assim:
CREATE TRIGGER TRIG_FOO ON FOO FOR INSERT, UPDATE, DELETE AS BEGIN
DECLARE @AFFECTED CURSOR
SET NOCOUNT ON
IF EXISTS (SELECT * FROM INSERTED)
SET @AFFECTED = CURSOR FOR SELECT ID FROM INSERTED
ELSE
SET @AFFECTED = CURSOR FOR SELECT ID FROM DELETED
OPEN @AFFECTED
FETCH NEXT FROM @AFFECTED INTO @BAZ
WHILE @@FETCH_STATUS = 0 BEGIN
--- trigger logic
FETCH NEXT FROM @AFFECTED INTO @BAZ
END
SET NOCOUNT OFF -- (*)
END
O gatilho não falha se eu remover a última linha ( SET NOCOUNT OFF
). Usamos esse tipo de gatilho em muitas tabelas por muitos anos e sempre funcionou corretamente (mesmo se um cursor for usado). Tentei encontrar a fonte do erro com:
- fechando e desalocando o cursor
- usando um cursor de avanço rápido
- saída de depuração e uma tabela de log separada
- SQL Server Profiler (rastrear instruções executadas, mensagens e erros)
- Eventos estendidos (eventos de log de instruções executadas)
Em nenhum lugar encontrei uma pista em qual parte do gatilho o outro conjunto de resultados é criado. Nenhum outro gatilho é definido para esta tabela.
Quero entender a causa da mensagem de erro - o que posso fazer? E é seguro remover a última linha do gatilho?