问题:如果你还记得用SQL Server 2000工作的情形,那么你可能会记得在查询分析器中调试程序(存储过程、UDF和触发器)的样子,因为一个调试工具是可以使用它的。从SQL Server 2005开始,查询分析器和企业管理就合并成SSMS。虽然这个单一界面简化了使用SQL Server 的过程,但是一个主要的缺点是,它不允许你从那里调试程序。要达到这个目的,你需要安装Visual Studio(企业和专业)版本,在你的开发机器上允许你调试一个程序。安装Visual Studio的要求是数据库开发人员和数据库管理人员可能不愿意去做,因为它要求额外的费用来支付Visual Studio 证书并且在安装之后把其它压力放在物理盒中。
SSMS中的调试性能是用户长期追求的一个功能,最终Microsoft SQL Server团队决定在SQL Server 2008中提供这个功能。有了这个功能,你可以逐行浏览你的代码,查看程序中变量的当前状态,而在一个输出窗口中你可以观察代码正在做什么,在错误窗口中,你可以向前一行浏览也可以向后查看,发现系统对象如访问堆和线程,除此之外,你甚至可以安置“断点”然后告诉调试器运行代码直到该点在停止。
实例
你可以通过点击查询工具栏中的Debug按钮或者点击Debug菜单中的Start Debugging或者按ALT+F5来启动调试器。
在下面的图像中,我在一个调试模式下执行代码;你会注意到虽然本地窗口的细节只是看得见的,但是底下一些窗口显示了T-SQL调试器中当前范围内本地变量的信息。
图一
让我们看看另一个例子。本例子的脚本在下面表格中提供,一个程序调用另外一个程序,因此,在执行过程中如果你看看Call Stack窗口,你会得到当前的执行位置和执行如何从最初的编辑器窗口通过任何T-SQL路径(函数、存储过程或者触发器)传递到如下显示的当前执行位置。
脚本 #1: 创建一个调用其他程序的程序
CREATE PROCEDURE PROC1
AS BEGIN PRINT 'A' PRINT 'B' EXECUTE PROC2 END GO CREATE PROCEDURE PROC2 AS BEGIN PRINT 'C' PRINT 'D' END GO EXECUTE PROC1 GO |
图二
注意事项
SSMS必须在一个Windows/SQL Server账户下运行,该账户是系统管理员固定服务器角色中的一员,否则,你将得到类似于下图的错误信息:
图三
当SSMS正在从一个不同计算机上的数据库引擎实例中运行时,如果你在运行T-SQL调试器,你必须通过Windows防火墙控制面板应用程序在两个计算机上启用程序和端口例外。
微软建议T-SQL代码应该在一个开发/测试服务器上调试,而不是在一个生产服务器中,首先这是因为它要求成员必须作为系统管理员固定服务器角色的一部分来调试,其次是因为当你调试和研究时,它可能会保存资源更长时间。
限制
如果你甚至从SQL Server 2008 SSMS连接到SQL Server 2005,那么你可能不能调试你的程序并得到下面的错误,这种情况会发生,那是因为T-SQL调试器包含服务器端和客户端的组件,因此,概括来说,它只能与SQL Server 2008工作到这种程度。
图四
T-SQL调试器不支持设置断点情形或者触及法律的Microsoft Visual Studio功能。
ubuntu 18.04安装ftp服务器
ubuntu 18.04设置开机自动挂载移动硬盘
使用apache commons net进行ftp传输
Navicat连接MySQL 8出现2059
Eclipse配置tomcat
MySQL从.ibd文件中恢复数据
MySQL建表时添加备注以及查看某一张表的备注信息
在node.js中使用Set
Java测试当前应用所占用的内存示例
- 最新文章
-
iOS开发小技巧--字典和数组的中文输出
iOS边练边学--iOS中的XML数据解析
JNA—JNI终结者
C++ dll调用-动态(显式)
C++的构造函数和析构函数
vs2013运行c语言出现:无法查找或打开 PDB 文件。
.bat批处理脚本让cmd命令行提示符cd到工作目录 (转)
visualvm 监控 远程 机器上的 Java 程序
tomcat 7 下添加 shared/lib 文件夹
YARN加载本地库抛出Unable to load native-hadoop library解决办法
- 热门文章
-
解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin.
使用后台线程BackgroundWorker处理任务的总结
C#在后台运行操作:BackgroundWorker的用法
在UI程序设计中使用BackgroundWorker进行多线程异步处
backgroundWorker取消后,重新开始就报错:此 BackgroundWorker 当前正忙,无法同时运行多个任务。
C# 多线程防止卡死
[小工具] C#多线程|匿名委托传参数|测试网站压力--升级版
C#多线程解决界面卡死问题的完美解决方案,BeginInvoke而不是委托delegate
Socket 通信(基础原理、实时聊天系统雏形)
C# 多线程详解 Part.04(Lock、Monitor、生产与消费)