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 / 139021
Accepted
JJS
JJS
Asked: 2016-05-20 07:47:52 +0800 CST2016-05-20 07:47:52 +0800 CST 2016-05-20 07:47:52 +0800 CST

Como obter o número da linha atual de um procedimento armazenado em execução

  • 772

Existe uma função ou palavra-chave que me permitirá obter o número da linha atual em um procedimento armazenado?

Eu sei que há uma LineNofunção não documentada que permite definir o número da linha e afetar a saída das mensagens de erro do sistema https://stackoverflow.com/questions/4054511/what-exactly-does-the-t-sql-lineno-reried -palavra-fazer

Eu sei que há uma função ERROR_LINE()disponível dentro de um arquivo BEGIN CATCH ... END CATCH.

ERROR_LINE()faz o que preciso, mas quero usá-lo de fora de um bloco CATCH. Em qualquer lugar do arquivo.

 DECLARE @InsertSource VARCHAR(1000) = object_name(@@procid)
 EXEC PROC_Accounting_Transaction_Insert ... other parameters..., @InsertSource

Atualmente, estou apenas codificando o número da chamada conforme ele aparece no corpo do procedimento armazenado, mas está envelhecendo rapidamente.

DECLARE @InsertSource VARCHAR(1000) 

SET @InsertSource = object_name(@@procid) + '#1'
EXEC ...

SET @InsertSource = object_name(@@procid) + '#2'
EXEC ...
sql-server t-sql
  • 2 2 respostas
  • 16310 Views

2 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2016-06-03T12:55:56+08:002016-06-03T12:55:56+08:00

    Na verdade, essa pergunta surgiu há 2,5 anos no StackOverflow, e postei uma resposta lá:

    Número da linha de impressão SQL no comentário do procedimento armazenado criado dinamicamente?

    A parte relevante dessa resposta é copiada abaixo:


    Você pode usar TRY/ CATCHcom um erro forçado, pois o CATCHbloco pode retornar o número da linha em que ocorreu o erro por meio da ERROR_LINE()função. A construção completa, formatada para facilitar a leitura, é:

    DECLARE @Line INT = -1; -- default to an invalid line #
    
    -- some code
    
    BEGIN TRY
        ;THROW 50000, 'Line#', 1; -- all 3 values are arbitrary, but required
    END TRY
    BEGIN CATCH
        SET @LineNumber = ERROR_LINE();
    END CATCH
    
    -- some code
    

    Agora, para que a @LineNumbervariável seja preenchida com o número da linha em que está sendo definida, você pode reduzir essa construção a uma única linha da seguinte maneira:

    BEGIN TRY;THROW 50000,'',1;END TRY BEGIN CATCH;SET @Line=ERROR_LINE();END CATCH
    

    Observe que o THROWcomando foi iniciado no SQL Server 2012. Se você estiver usando o SQL Server 2005, 2008 ou 2008 R2, precisará usar a RAISERROR()função em vez de THROW.

    • 8
  2. JJS
    2016-05-20T10:27:14+08:002016-05-20T10:27:14+08:00

    Adam Machanic me enviou isso por e-mail

    DECLARE @lineno INT
    BEGIN TRY SET @lineno = 1/0 END TRY BEGIN CATCH SET @lineno = ERROR_LINE() END CATCH
    

    Ele se qualifica como uma linha em meu livro.

    Por @ScottGartner, um verdadeiro one-liner.

    BEGIN TRY print 1/0; END TRY BEGIN CATCH print 'Line Number: ' + CAST(ERROR_LINE() as nvarchar(20)); END CATCH;
    
    • 5

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