Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 是否有任何方法可以调试SQL Server 2008查询?_Sql Server 2008 - Fatal编程技术网

Sql server 2008 是否有任何方法可以调试SQL Server 2008查询?

Sql server 2008 是否有任何方法可以调试SQL Server 2008查询?,sql-server-2008,Sql Server 2008,有没有办法调试SQL Server 2008查询?是的,您需要设置断点。是的。您可以使用T-SQL调试器: 以下是如何逐步完成查询:您所说的调试到底是什么意思? 您是否看到不正确的数据? 您是否收到意外的重复行 我通常从一组已知的数据开始,如果可能的话,通常是一行或两行,然后注释掉所有连接和where条件 从连接开始,在查询中每次引入一个附加元素 在每一步中,您都应该知道需要多少记录 一旦您引入了与您的预测不匹配的连接或where条件,您就知道您已经找到了问题陈述 如果它是一个带有变量等的存储

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

是的,您需要设置断点。

是的。您可以使用T-SQL调试器:


以下是如何逐步完成查询:

您所说的调试到底是什么意思? 您是否看到不正确的数据? 您是否收到意外的重复行

我通常从一组已知的数据开始,如果可能的话,通常是一行或两行,然后注释掉所有连接和where条件

从连接开始,在查询中每次引入一个附加元素

在每一步中,您都应该知道需要多少记录

一旦您引入了与您的预测不匹配的连接或where条件,您就知道您已经找到了问题陈述

如果它是一个带有变量等的存储过程,则始终可以
打印
变量在不同点的值

如果只希望执行到存储过程中的特定点,则可以随时返回并停止处理

如果在调试过程时,在执行之间必须销毁临时表,那么我使用的一个常见技巧是创建一个标签,如-

cleanup:

然后,无论我想在什么时候退出,我都可以
转到清理
(我知道转到很糟糕,但在调试存储过程时效果很好)

坦白地说,我发现调试实际上是无用的。我通常不希望看到变量,而是希望看到我将要插入到表中或更新或删除的记录

当我有一个复杂的sp要调试时,我会这样做

首先,我创建一个测试变量。当我想测试时,我将它设置为1。通过确保commit语句要求将测试变量设置为0,这将确保在事务结束时回滚所有操作(在确定proc正在执行所需操作之前,不希望实际更改datbase)

在程序结束时,我通常有一个if测试=1开始 END语句,在begin和END之间,我为所有我想查看的内容放置select语句。这可能包括任何表变量或临时表、插入后特定表中的记录、我删除的记录或我认为需要查看的任何其他内容。如果我多次测试,我可能会注释掉对我知道是正确的表的引用,并只关注那些我已经更改的表。 现在我可以看到我的进程的效果了,如果更改不正确,就会回滚这些更改。为了实际提交更改(而不查看中间步骤),我只需更改测试变量的值


如果我使用动态SQL,我还有一个调试变量,它不执行动态SQL,而是将结果打印到屏幕上。我发现在调试复杂脚本时,所有这些都比显示变量值的断点有用得多。

如何在单个语句中设置断点?我不知道你可以这么做。我不认为你可以在一条语句中设置断点。我只相信在多语句存储过程或函数中。如果我错了,请纠正我,这些年来我一直在努力:)SQL Server 2008现在提供了一个本地T-SQL调试器-在整个代码中不再需要打印语句!不幸的是,我的许多客户仍然在2005年甚至2000年,所以我需要在相当长的一段时间内继续旧的方式!您必须是服务器sysadmin组的成员,才能执行sp_enable_sql_debug。这不是每个服务器管理员都愿意授予开发人员的特权