ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

T-SQL调试器重返SQL Server 2008

2021-07-02 18:03:03  阅读:162  来源: 互联网

标签:SSMS Server SQL 2008 调试 调试器


T-SQL调试器重返SQL Server 2008

 

问题:如果你还记得用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功能。

       

标签:SSMS,Server,SQL,2008,调试,调试器
来源: https://blog.51cto.com/lzhdim/2972066

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有