更新:2007 年 11 月
本主题适用于:
| 版本 | Visual Basic | C# | C++ | Web Developer | 
|---|---|---|---|---|
| 速成版 | .gif) | .gif) | .gif) | .gif) | 
| 标准版 | .gif) | .gif) | .gif) | .gif) | 
| 专业团队版 | .gif) | .gif) | .gif) | .gif) | 
表格图例:
| .gif) | 适用 | 
| .gif) | 不适用 | 
| .gif) | 默认情况下隐藏的一条或多条命令。 | 
SQL 调试器提供很多常见的调试功能,但不是全部常见调试功能。SQL 调试支持大多数调试器命令,如设置断点和单步执行。可以在“局部变量”窗口中查看变量值和传递的参数值。当逐句通过或运行过程时,也可以将表达式拖动到“监视”窗口中以跟踪它们。
但是,由于 SQL Server 本身的一些基本特征,调试 SQL 发生的环境与普通调试发生的环境有很大的差异。某些调试限制仅适用于 T-SQL 调试或 SQL CLR 调试。另外一些限制适用于所有 SQL 调试。
关于 SQL 调试的一般限制条件
- 不能使用“编辑并继续”。 
- 不能在“调用堆栈”窗口中使用“运行到光标处”。 
- 当正在处理 SQL 语句时,不能使用“中断”。 
- SQL PRINT 语句的输出不显示在调试器中或“数据库输出”窗格中。 
- 在 Visual Studio 中不能使用自动回滚 (AutoRollback)。如果再现更改数据的 bug,则可能会因更改了数据而丢失该 bug。 
- 许多窗口要么不可用,要么不提供任何功能。它们是: - 内存 
- 寄存器 
- T-SQL 的“反汇编”窗口 
 
T-SQL 调试限制
- 不支持断点条件和筛选器。 
- 因为 SQL 没有真正的内存或寄存器,所以不能使用“内存”窗口或“寄存器”窗口。 
- 不能使用“设置下一语句”更改执行序列。您必须遵循 SQL 代码中的流控制顺序和语句顺序。作为对此限制的一种解决方法,您可以将控制语句放在 SQL 代码块周围,并更改控制语句中变量的值。 
- 不能从 T-SQL 对象内部访问任何 .Net Framework 变量或属性。 
- 可以显示“即时”窗口,但不能使用它执行任何有用的操作,例如为变量赋值和查询数据库。 
- 许多窗口要么不可用,要么不提供任何功能。它们是: - 反汇编 
- 线程 
- 寄存器 
- 进程 
- 模块 
 
SQL CLR 调试限制
- 由于在进行任何 SQL CLR 调试时,所有 SQL CLR 代码执行都将冻结,所以每台服务器上只能发生一个 SQL CLR 调试会话。因此,调试器用户需要是 SQL 系统管理员才能执行 SQL CLR 调试。 
- 决不应在生产服务器上执行 SQL CLR 调试。SQL CLR 调试有很大风险:SQL CLR 调试器可以读写进程内存,并可以在服务器进程中执行任意代码。这会导致服务器上的所有托管线程停止。而且当终止调试会话时,SQL Server 会暂停。 
- 从 CLR SQL 对象内不能访问全局 SQL 变量,如 @@ROWCOUNT。 
- 在 Visual Studio SQL Server 项目中,只能添加对 .NET Framework 类库子集的引用。不是所有程序集都可引用。