【问题标题】:How can I dump a SELECT statement to the "Messages" pane in SQL Server mgmt studio from a stored procedure?如何将 SELECT 语句从存储过程转储到 SQL Server mgmt studio 中的“消息”窗格?
【发布时间】:2009-07-02 19:37:19
【问题描述】:

我可以在存储过程中使用 PRINT 语句来调试我的代码。我在 SQL Server Management Studio 的“消息”选项卡中看到了输出。如何将一个或多个完整的 SELECT 语句输出转储到该消息选项卡?

我的存储过程返回多个输出变量,因此这里不能选择返回单个数据集。我正在努力寻找调试复杂程序的好方法。

【问题讨论】:

    标签: sql-server-2005 tsql stored-procedures ssms


    【解决方案1】:

    设置“结果为文本”选项,您的结果和消息选项卡将合并为一个选项卡,结合您的 PRINT 和 SELECT 语句。

    要将结果设置为文本,可以:

    • Control-T
    • 查询菜单\结果到\结果到文本

    【讨论】:

      【解决方案2】:

      将查询的全部内容打印到消息窗口可能会比它的价值更麻烦。相反,我建议从查询窗口调试该过程。您可以做的是在您的过程中添加一个可选参数,默认值为 NULL。您的应用程序不会通过它,因此您可以利用它来发挥自己的优势。例如:

      Alter Procedure Foo(@Col1 int, @col2 varchar(20), @Debug Bit = NULL)
      As
      SET NOCOUNT ON
      
      If @Debug = 1
        Begin
          Select * From SomeTable Where Col1 = @Col1
        End
      
      -- The rest of your code here
      

      然后,当您从查询窗口调用此过程时,只需将值 1 传递给该 @Debug 参数的过程

      【讨论】:

        【解决方案3】:

        您可以从有问题的存储过程中填充一个临时表或表变量,然后在调用存储过程后从这些表中进行选择。确保删除并重新创建 sp 中的任何临时表。

        CREATE TABLE ##t1 (x int)
        GO
        
        CREATE PROCEDURE Foo AS
        BEGIN
          TRUNCATE TABLE ##t1
          INSERT INTO ##t1 SELECT column FROM table;
        END
        GO
        
        exec Foo;
        select x from ##t1;
        

        【讨论】:

          【解决方案4】:

          它必须在消息窗格中吗?我总是发现只运行选择查询很方便,它将结果输出到结果窗格中,实际输出在另一个结果集中。有时我会包含一个有助于识别结果的“标识符”列。例如:

          select 'checkpoint1',a,b,c from table1
          ....
          select 'table @a', *  from @a
          ....
          <actual query here>
          

          当存储过程准备就绪时,只需删除这些脚手架语句

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多