问题:如果你还记得用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功能。
常用工具备忘
spring使用@Value标签读取.properties文件的中文乱码问题的解决
一致性哈希算法(适用于分库分表、RPC负载均衡)转
使用事件和消息队列实现分布式事务(转+补充)
关于架构优化和设计,架构师必须知道的事情(转)
做了 3 年企业级 SaaS,我收获的 10 点心得(转)
这五件事,二次SaaS创业的老炮儿都在做(转)
阿里云端口失效导致tomcat无法对外提供服务
SaaS公司融资的「22条军规 」(转)
- 最新文章
-
异常积累:org.hibernate.StaleStateException
hibernate主键生成机制与save返回
javax.xml.ws.webserviceexception class do not have a property of the name
spider RPC更新至2.0.0-RELEASE
axure rp 8.0注册码(亲测)
互联网支付系统整体架构详解(转)
消费金融及物流概念介绍
在见证了1000多家公司的兴衰灭亡之后,YC创始合伙人总结了创业公司的6个不死法则(转)
从“为什么创业”到“怎么创业”(转)
我是这样做APP的:击中用户的痛点(转)
- 热门文章
-
左耳朵耗子:不灌鸡汤,说真的年龄渐长,技术人的发展之路该怎么走?(转)
mongodb安装、远程访问设置、管理命令、增删改查操作以及GUI
升级到0.9 log4jmongodb(mongo-java-driver 3.x)后,报No server chosen by WritableServerSelector from cluster description ClusterDescription
log4j配置目标到mongodb
cannot_delete_plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@iZbp1iiexwyqe7tpjigcg9Z-plugins-expand"
windows 7/10 安装u盘制作
mongodb三种引擎测试(生产实际验证)
centos/rhel 7 几个最重要变化(systemd,firewalld,networkmanager,文件系统)
[ERROR] InnoDB: Trying to access page number 7 in space 957, space name XXX which is outside the tablespace bounds
springmvc StringHttpMessageConverter 中文乱码的几种解决办法(亲测)