AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 345466
Accepted
ventiseis
ventiseis
Asked: 2025-02-27 00:37:25 +0800 CST2025-02-27 00:37:25 +0800 CST 2025-02-27 00:37:25 +0800 CST

Como depurar: "O gatilho retornou um conjunto de resultados e/ou estava sendo executado com SET NOCOUNT OFF"?

  • 772

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?

sql-server
  • 2 2 respostas
  • 82 Views

2 respostas

  • Voted
  1. Best Answer
    Dan Guzman
    2025-02-27T01:06:11+08:002025-02-27T01:06:11+08:00

    é seguro remover a última linha do gatilho?

    Sim. O final SET NOCOUNT OFFnão serve para nada porque a configuração retorna para a configuração em vigor antes do gatilho disparar de qualquer maneira.

    Trecho relevante da documentação do CREATE TRIGGER :

    Qualquer declaração SET pode ser especificada dentro de um gatilho. A opção SET selecionada permanece em efeito durante a execução do gatilho e então reverte para sua configuração anterior.

    • 3
  2. Paul White
    2025-02-27T09:04:54+08:002025-02-27T09:04:54+08:00

    Parece que você truncou a mensagem de erro. Parece #523:

    Um gatilho retornou um conjunto de resultados e/ou estava sendo executado com SET NOCOUNT OFF enquanto outro conjunto de resultados pendente estava ativo.

    Intencionalmente ou não, você parece ter o MARS habilitado e está, na verdade, gerando vários conjuntos de resultados ativos ao mesmo tempo. Às vezes, isso pode ser devido a um aplicativo não ler até o fim todos os resultados disponíveis do servidor.

    Seu gatilho pode ser apenas SET NOCOUNT OFFbrevemente no final (antes de ser revertido para a configuração anterior na saída do módulo), mas isso é o suficiente para produzir o erro. Sim, você pode removê-lo com segurança.

    • 3

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve