【问题标题】:Find results from execution of stored procedure查找执行存储过程的结果
【发布时间】:2014-06-15 01:24:51
【问题描述】:

我在 SQL Server Management Studio 2005 中执行了一个存储过程,但是我没有检查存储过程是否成功执行。 我使用了以下命令:

exec [Stored Procedure name] '[param1]' , '[param2]'

现在,我想找到:

a) 如果存储过程成功执行

b)这次执行的结果是什么

我找不到任何相关文档。 你能帮忙吗?

【问题讨论】:

  • SP 是做什么的?如果它在表中添加记录或更新记录,则应该很容易检查这些表并进行确认。如果只是根据参数选择数据,那可能查不到
  • @Raj 第二种,SP根据参数选择数据并返回。我不确定是否创建了一个临时表来显示结果。
  • 即使创建了一个临时表,它也会在 SP 成功执行时被删除
  • @Raj 是的,我知道。我想知道我的问题是否有任何通用方法
  • 是什么让您从 Management Studio 执行 SP 并阻止查看结果/错误?为什么要重新发明轮子?

标签: sql sql-server sql-server-2005 stored-procedures exec


【解决方案1】:

另一种方法是将 sp 的整个主体放入 try-catch 块中。在 try 结束时,insert into 审核/日志表中的一些您感兴趣的值(例如:用于插入的 scope_identity、纯文本(如“完成!”)、一些时间戳以查看何时它被运行了,等等。)而在 catch 中,您可以执行相同的操作,但根据您的需要使用不同的值:ERROR_MESSAGE, ERROR_NUMBER、“发生错误!”等。有很多方法可以'审计'一个存储过程,你只需要选择一个最适合你需要的。

【讨论】:

    【解决方案2】:

    如果这些只是 SELECT,您只能在 SSMS 的结果窗格或调用存储过程的应用程序中看到输出。在服务器中,记录将被加载(缓存)。

    要查看缓存在 SQL Server 内存中的内容,请参阅此页面 What is cached by sql server

    【讨论】:

      【解决方案3】:

      这可以让您了解上次调用 SP 的时间

      SELECT qt.[text] AS [SP Name], 
             qs.last_execution_time, 
             qs.execution_count AS [Execution Count] 
      FROM sys.dm_exec_query_stats AS qs
      CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
      WHERE qt.dbid = db_id() -- Filter by current database
      AND qt.text LIKE '%YourSPName%'
      

      除非 SP 有WITH RECOMPILE,否则如果正在使用它应该在缓存中(除非发生了刷新缓存的事情)。但是,我认为,事后找到返回的结果是不可能的。您可以重新执行 SP 并通过运行跟踪来检查,我猜

      【讨论】:

        【解决方案4】:

        重写查询大概是插入/更新作为选择并输入您输入的参数。如果表上有由存储过程更新的审计字段,这种方式就可以了。否则,只要您具有所需的权限,查询 dm_exec_query_stats 就可以了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-06-21
          • 2010-10-10
          • 2013-09-15
          • 2016-02-01
          • 2017-10-07
          • 1970-01-01
          • 1970-01-01
          • 2014-12-07
          相关资源
          最近更新 更多