有没有办法调试SQL Server 2008查询?

时间:2010-04-20 10:52:21

标签: sql-server-2008

有没有办法调试SQL Server 2008查询?

4 个答案:

答案 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只是将结果输出到屏幕。我发现这一切在调试复杂脚本方面比告诉我变量值的断点更有用。