我想使用SSMS 2012调试一个复杂的T-SQL脚本。
我可以在调试模式下运行脚本并设置断点,以及逐步执行我的脚本,但我无法看到存储在表变量中的值。
在Locals
窗口中,我可以看到所有这些变量,但它们的值显示为(table)
:
无法通过上下文菜单或单击变量来查看变量的内容。
我尝试使用Immediate Window
对表变量运行查询,但似乎也不起作用。
有任何想法如何在调试会话中获取表变量的值吗?
我想使用SSMS 2012调试一个复杂的T-SQL脚本。
我可以在调试模式下运行脚本并设置断点,以及逐步执行我的脚本,但我无法看到存储在表变量中的值。
在Locals
窗口中,我可以看到所有这些变量,但它们的值显示为(table)
:
无法通过上下文菜单或单击变量来查看变量的内容。
我尝试使用Immediate Window
对表变量运行查询,但似乎也不起作用。
有任何想法如何在调试会话中获取表变量的值吗?
SELECT *
,显示表格的当前状态,并包括额外的PRINT
或RAISERROR
消息,显示其他状态等。然后只需正常运行代码,直到将其调整为所需状态。使用下面的代码,您可以将表格内容以 XML 格式查看。
DECLARE @v XML = (SELECT * FROM <tablename> FOR XML AUTO)
检查SELECT语句返回的内容是很有用的。我测试了一下,它有效。
在此处阅读更多信息here.
我只是简单地在脚本中放置select语句,然后它会将结果显示到结果窗口中。
从@VarTable选择*;
现在当我逐步执行代码并命中select时,它将显示这些值。 然后我要么在测试完成后将它们注释掉,要么设置一个测试标志。
希望这能帮到你。
在代码中包含select语句是我知道并且能想到的唯一方法。
在数据库中拥有一个'配置'表,可以永久添加调试代码到存储过程(SP),这有助于经常需要调试时。您可以留下像 "if ({config table 中选择日志级别}) = {debug} then select '@variable at location 1' as [@variable at location 1], * from @variable order by {some useful order}" 这样的代码。
使用我所包含的变量名以及可能的位置(如果有多个需要检查的位置)在结果和列名中,即使特定表变量没有行且您没有预期到这一点,也很容易区分输出中的变量。