代码之家  ›  专栏  ›  技术社区  ›  srmark

如何从存储过程将select语句转储到SQL Server mgmt studio中的“消息”窗格?

  •  5
  • srmark  · 技术社区  · 15 年前

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

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

    4 回复  |  直到 11 年前
        1
  •  3
  •   George Mastros    15 年前

    将查询的全部内容打印到消息窗口可能比它的价值更麻烦。相反,我建议您从查询窗口调试该过程。您可以做的是向过程中添加一个可选参数,默认值为空。你的应用不会通过它,所以你可以利用它为你的优势。前任:

    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参数的过程。

        2
  •  11
  •   boflynn    15 年前

    设置“结果为文本”选项,您的结果和消息选项卡将合并到单个选项卡上,并结合打印和选择语句。

    要将结果设置为文本,请执行以下操作之一:

    • 控制T
    • 查询菜单\结果到\结果到文本
        3
  •  2
  •   Michael Petrotta user3140870    15 年前

    您可以从有问题的存储过程中填充临时表或表变量,然后在调用存储过程后从这些表中进行选择。确保删除并重新创建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
  •  1
  •   Amit G    15 年前

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

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

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