【问题标题】:How to see the values of a table variable at debug time in T-SQL?如何在 T-SQL 的调试时查看表变量的值?
【发布时间】:2010-12-26 10:19:39
【问题描述】:

我们能否在调试期间在 SQL Server Management Studio (SSMS) 中查看表值变量中的值(行和单元格)?如果是,怎么做?

【问题讨论】:

    标签: sql debugging ssms table-variable


    【解决方案1】:

    只需使用选择查询来显示表格变量,无论您要检查的位置。

    http://www.simple-talk.com/sql/learn-sql-server/management-studio-improvements-in-sql-server-2008/

    【讨论】:

    • 是同意的最佳和最快的选择。如果您需要更多控制,只需执行此操作并仅突出显示并执行您希望运行的 SQL。
    • 使用选择查询在哪里,在监视窗口中?
    • 使用过程中的选择或您正在执行的任何临时查询
    • 但我需要测试的是一个表值函数,它会抛出错误“函数中包含的选择语句无法将数据返回给客户端”。有没有其他方法,专门通过提供的调试工具来检查?
    • 不,这不能解决问题。我认为如果没有任何额外的插件,这是不可能的。
    【解决方案2】:

    我得出的结论是,如果没有任何插件,这是不可能的。

    【讨论】:

    • 我看到了一些 Visual Studio 2010 的预览。非常花哨、复杂和详细……演示者不知道是否可以在调试模式下查看临时表。也许当它被释放时,但我没有屏住呼吸。
    【解决方案3】:

    尚未根据此 Microsoft Connect 链接实现: Microsoft Connect

    【讨论】:

    • 我们已经到了 2016 年。再好不过了。 Connect 链接也不再起作用。
    • 老实说,这实际上不是一个答案,因为它没有回答问题,问题是如何做到这一点(不是 SSMS 是否有任何功能),说明这不是在那里实现的显示值的方法不是很有帮助。
    • 请删除此答案。下面的答案应该是公认的答案。
    • 2018,还是不行。
    【解决方案4】:
    DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)
    

    在您要查看表格内容的位置插入上述语句。表格的内容将在 locals 窗口中呈现为 XML,或者您可以将 @v 添加到手表窗口。

    【讨论】:

    • 这绝对是一种解决方法,足以将小表显示为 XML。
    • 但还是不要停止阅读!下面的另一个很棒的选择!很棒的线程!
    • 我有大型表格,其中的 XML 阅读起来不太友好。我采取了另一个步骤 - 复制 XML 并粘贴到 xmlgrid.net 中,您可以将 XML 视为表格。表格可视化确实有帮助。正在等待具有表查看器的 SSMS 版本,例如 Visual Studio 中的数据表查看器。
    • 您可以在“FOR XML”子句中添加“,ROOT('rootNodeName')”。这将在单个根下收集多行(如果有),从而形成合法的 XML 文档,可以使用 XML 可视化器而不是文本可视化器查看。
    • 使用 SQL Server 2016 或从不使用此DECLARE @v nvarchar(max) = (SELECT * FROM &lt;tablename&gt; FOR JSON AUTO)的 JSON 版本
    【解决方案5】:

    这个项目https://github.com/FilipDeVos/sp_select 有一个存储过程sp_select,它允许从临时表中进行选择。

    用法:

    exec sp_select 'tempDb..#myTempTable'
    

    在调试存储过程时,您可以打开一个新选项卡并运行此命令以查看临时表的内容。

    【讨论】:

    • 非常适合临时表,但不适用于表变量
    • 如果有一个打开的事务也会挂起,所以如果在 tSQLt 等框架中使用调试测试,它总是在测试开始时打开一个事务。
    • 哇哇哇哇
    • 好——如果你能按一两列排序就好了
    • 非常棒的解决方案,感谢分享!
    【解决方案6】:

    SQL Server Profiler 2014 列出了表值参数的内容。也可能在以前的版本中工作。 在存储过程组和 TextData 列中启用 SP:Starting 或 RPC:Completed 事件,当您单击日志中的条目时,您将获得表变量的插入语句。 然后,您可以复制文本并在 Management Studio 中运行。

    样本输出:

    declare @p1 dbo.TableType
    insert into @p1 values(N'A',N'B')
    insert into @p1 values(N'C',N'D')
    
    exec uspWhatever @PARAM=@p1
    

    【讨论】:

      【解决方案7】:

      在存储过程中创建一个全局临时表 ##temptable 并在存储过程中编写插入查询,将表中的数据插入到这个临时表中。

      完成后,您可以通过打开一个新的查询窗口来检查临时表的内容。 只需使用“select * from ##temptable”

      【讨论】:

        【解决方案8】:

        为什么不直接选择表格并以这种方式查看变量?

        SELECT * FROM @d
        

        【讨论】:

        • 请解释如何去做。向正在调试的脚本添加SELECT * FROM @Table 不会将结果发送到结果窗口。
        【解决方案9】:

        对不起,伙计们,我参加聚会有点晚了,但是对于以后偶然发现这个问题的任何人,我发现在存储过程中执行此操作的最简单方法是:

        1. 使用在顶部声明和初始化的任何过程参数创建一个新查询。
        2. 粘贴到您的程序主体中。
        3. 在使用数据初始化表变量后立即添加一个良好的老式选择查询。
        4. 如果 3. 不是过程中的最后一条语句,请在同一行设置断点,开始调试并直接继续到断点。
        5. 利润!!

        messi19 的答案应该是公认的恕我直言,因为它比我的更简单,并且大多数时间都可以完成工作,但是如果您像我一样并且在循环中有一个表变量您想检查一下,这可以很好地完成工作,无需太多努力或外部 SSMS 插件。

        【讨论】:

        • 这与 OP 试图做的完全相反。
        【解决方案10】:

        如果您使用的是 SQL Server 2016 或更新版本,您还可以选择它作为 JSON 结果并在 JSON Visualizer 中显示,它比 XML 更容易阅读,并且允许您过滤结果。

        DECLARE @v nvarchar(max) = (SELECT * FROM Suppliers FOR JSON AUTO)
        

        【讨论】:

        • 对于不熟悉 JSON Visualizers 的人(比如我):在 Locals 或 Watch 窗口中的变量“值”旁边有一个下拉菜单。选择 JSON 以获取此处显示的窗口。
        猜你喜欢
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-09
        • 2012-01-01
        • 2021-05-24
        • 2018-02-10
        相关资源
        最近更新 更多