有没有办法调试SQL Server 2008查询?
答案 0 :(得分:4)
是。您可以使用T-SQL调试器: http://technet.microsoft.com/en-us/library/cc646008.aspx
以下是您逐步完成查询的方式:http://technet.microsoft.com/en-us/library/cc646018.aspx
答案 1 :(得分:1)
调试究竟是什么意思? 你看到不正确的数据吗? 您是否获得了意外的重复行?
我通常做的是从一组已知的数据开始,如果可能的话通常是一行或两行,并注释掉所有连接和条件。
从连接开始,一次一个地引入查询中的每个附加元素。
在每一步中,您应该知道您期望的记录数。
只要您引入类似联接的内容或与您的预测不匹配的条件,您就知道已找到问题陈述。
如果它是包含变量等的存储过程,您可以始终在不同点上PRINT
变量值。
如果您只想执行存储过程中的特定点,那么您可以随时RETURN
并停止处理。
如果你在调试程序时有必须在执行之间销毁临时表,我使用的一个常见技巧是创建一个像 -
这样的标签cleanup:
然后无论我想保释什么,我都可以goto cleanup
(我知道goto很可怕,但是在调试sprocs时效果很好)
答案 2 :(得分:0)
是的,您需要设置一个断点。
答案 3 :(得分:0)
坦率地说,我发现调试几乎没用。我经常不希望看到变量,而是我要插入表或更新或删除的记录。
当我有一个复杂的sp进行调试时,我所做的就是这个。
首先,我创建一个测试变量。当我想测试时,我设置它= 1。这将确保所有操作iteh事务在最后回滚(不希望实际更改数据库,直到您确定proc正在执行您想要的操作。)通过确保commit语句要求设置测试变量到0。
在proc结束时,我通常有一个if test = 1开始 END语句和开始和结束之间,我把选择的语句放在我想看到的所有值的值上。这可能包括任何表变量或临时表,插入后特定表中的记录,我删除的记录或我认为需要查看的任何其他内容。如果我正在测试多次,我可能会注释掉对我知道正确的表格的引用,并且只关注我已经改变的那些表格。 现在我可以看到我的proc的效果是什么,并且如果它们不对,则会回滚更改。要实际提交更改(而不是查看中间步骤),我只需更改测试变量的值。
如果我使用动态SQL,我还有一个调试变量,而不是执行动态SQl只是将结果输出到屏幕。我发现这一切在调试复杂脚本方面比告诉我变量值的断点更有用。