今天写了个存储过程,在查询分析器中测试报错:
这样的错误信息根本看不出错在哪边,只能用单步执行来追踪了。在查询分析器对象浏览器中找到要调试的存储过程,右键点击选择调试:
输入各个参数的值后开始调试(钩选自动回滚调试完毕后将回滚操作):
按F11单步执行:
终于找到错误的位置了:
修改存储过程,输出@strSQL的值,才发现原来是声明的时候设置@strSQL的长度为300,而拼接的SQL语句太长了,长出的部分被截断才导致出错,OK,将@strSQL长度增加,问题解决!
说明:如果在存储过程中有SET NOCOUNT ON语句,在调试过程中应注释掉,在本次调试过程中发现有SET NOCOUNT ON调试器遇错会继续执行,也不报错!
在SQL Server联机丛书中说明:建议不要在生成服务器上使用 Transact-SQL 调试程序。在步骤执行模式下,调试程序会锁定其它进程所需的某些系统资源。
2008-07-31补充:
晚上在家里运行调试器失败,提示:
引用内容
服务器: 消息 508,级别 16,状态 1,过程 sp_sdidebug,行 1
[Microsoft][ODBC SQL Server Driver][SQL Server]无法连接到 LF-CBIXQUB2CZ5G 上的调试程序(错误 = 0x800401f3)。请确保已在 LF-CBIXQUB2CZ5G 上安装并注册了客户端组件(如 SQLLE.DLL)。已禁用对 52 的调试。
百度了下,大都是说将MSSQLSERVER服务的登录方式设置为一个windows帐户或是将VS2003/2005安装目录中的sqlserver\mssdi98.dll覆盖掉SQL Server2000安装目录中的Binn\mssdi98.dll,我试了均不成功,最终在一篇文章中看到说是SQL Server2000版本的问题,尝试着将本机的8.00.194(RTM)升到8.00.2039(SP4),问题得以解决。
Microsoft SQL Server 2000 sp4下载:http://www.crsky.com/soft/5814.html