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


187

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

在此处输入图片说明

Answers:


31

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



2
我们到了2016年,再好不过了。连接链接也不再起作用。
dotNET

5
老实说,这实际上不是答案,因为它没有回答问题,问题是如何做到的(不是SSMS是否具有任何功能),指出这是没有实现的,尽管有一些方法可以显示值很有帮助。
的Răzvan弗拉菲乌斯熊猫

1
请删除此答案。以下答案应该是公认的答案。
Vortex852456 '17

2018,仍然没有。
AgentFire

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

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

在此处输入图片说明


1
这绝对是一个变通办法,足以将小表显示为XML。
Faiz 2015年

4
但是仍然不要停止阅读!下面的另一个很棒的选择!好线程!
Mike M

1
我有大型表,XML读起来不是很友好。我采取了另一步骤-复制XML并粘贴到xmlgrid.net中,您可以将XML视为表格。表格可视化确实有帮助。等待具有表查看器(如Visual Studio中的数据表查看器)的SSMS发行。
Moiz Tankiwala

1
您可以在“ FOR XML”子句中添加“,ROOT('rootNodeName')”。这将在单个根目录下收集多行(如果有的话),这将构成一个合法的XML文档,可以使用XML可视化工具而不是文本可视化工具进行查看。
JohnL4

2
使用SQL Server 2016或永远不使用SQL Server 2016,您也可以使用此版本的JSON DECLARE @v nvarchar(max) = (SELECT * FROM <tablename> FOR JSON AUTO)
Sousuke

18

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

用法:

exec sp_select 'tempDb..#myTempTable'

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


6
非常适合临时表,但不适用于表变量
Harag 2014年

如果存在打开的事务,也会挂起,因此,如果在诸如tSQLt的框架中调试测试时使用的调试很少,该框架总是在测试开始时打开一个事务。
弥敦道

1
哇哇哇

好-如果您可以按一两列进行排序,那就太好了
user2486488

6

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

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


1

只需使用select查询在任何要检查的地方显示表varialble。

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


是的,同意最好和最快的选择。只需执行此操作,如果需要更多控制,仅突出显示并执行您希望运行的SQL。
Jammin

2
在监视窗口中的哪里使用选择查询?
Faiz

使用过程中的选择或您正在执行的任何即席查询
solairaja

但是我需要测试的是一个表值函数,它引发错误“函数中包含的Select语句无法将数据返回给客户端”。还有其他方法,特别是通过提供的调试工具进行检查吗?
Faiz

3
不,这不能解决问题。我认为,没有任何其他插件是不可能的。
Faiz

1

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

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

在此处输入图片说明


0

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


我看到了Visual Studio 2010的一些预览。非常奇特,复杂和详细...并且演示者不知道是否可以在调试模式下查看临时表。也许当它发布时,但我没有屏住呼吸。
菲利普·凯利2010年

0

SQL Server Profiler 2014列出了表值参数的内容。也可以在以前的版本中工作。在“存储过程”组和“文本数据”列中启用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


-3

抱歉,我参加聚会有点晚了,但是对于以后遇到这个问题的任何人,我发现在存储过程中执行此操作的最简单方法是:

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

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


这与OP试图做的完全相反。
Jamie Marshall
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.