如何在调试时在T-SQL中看到表变量的值?

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

enter image description here

111834 次浏览

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

根据这个Microsoft Connect链接,这还没有实现: 微软连接 < / p >

DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)

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

enter image description here

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

用法:

exec sp_select 'tempDb..#myTempTable'

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

SQL Server Profiler 2014列出表值参数的内容。可能也适用于以前的版本。 在存储过程组和TextData列中启用SP:启动或RPC:已完成事件,当您单击日志中的条目时,您将有表变量的插入语句。 然后,您可以复制文本并在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

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

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

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

SELECT * FROM @d

对不起,伙计们,我来的有点晚了,但是对于那些后来偶然发现这个问题的人来说,我发现在存储过程中最简单的方法是:

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

messi19的答案应该是IMHO所接受的答案,因为它比我的更简单,并且在时间上做了大多数的工作,但如果你像我一样,在一个循环中有一个表变量,你想检查,这很好地完成了工作,不需要太多的努力或外部SSMS插件。

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

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

enter image description here