zoukankan      html  css  js  c++  java
  • 存储过程调试

    昨天被问到sql server中存储过程怎么调试,我曾经写存储过程,调试方法非常笨拙,就是逐条运行语句,然后查看结果是不是预期的,这样的调试方法,实在是无奈之举,极大程度地限制了开发速度和准确性。今天在他的提点下,研究了下SQL SERVER 2008的存储过程调试。

    1.在SQL SERVER2008中调试存储过程

    下面内容引自MSDN

    SQL SERVER 2008的SSMS是支持单步debug的,可是在调试之前必须配置权限。

    假设 SQL Server Management Studio 与 SQL Server 数据库引擎实例在同一台计算机上执行,则对于执行 Transact-SQL 调试器没有配置要求。可是,当 SQL Server Management Studio 与数据库引擎实例在不同计算机上执行时,若要执行 Transact-SQL 调试器,则必须在两台计算机上使用“Windows 防火墙”控制面板应用程序来启用程序和port例外。

    在执行数据库引擎实例的计算机上,在“Windows 防火墙”中指定下面信息:

    • 将 TCP port 135 加入到例外列表。

    • 将程序 sqlservr.exe 加入到例外列表。默认情况下,sqlservr.exe 安装在 C:Program FilesMicrosoft SQL ServerMSSQL10.实例名称MSSQLBinn 下,当中,实例名称对于默认实例为 MSSQLSERVER,对于不论什么指定的实例则为对应实例的名称。

    • 假设域策略要求通过 IPSec 进行网络通信,还必须将 UDP port 4500 和 UDP port 500 加入到例外列表。

    在执行 SQL Server Management Studio 的计算机上,在“Windows 防火墙”中指定下面信息:

    • 将 TCP port 135 加入到例外列表。

    • 将程序 ssms.exe (SQL Server Management Studio) 加入到例外列表。默认情况下,ssms.exe 安装在 C:Program FilesMicrosoft SQL Server100ToolsBinnVSShellCommon7IDE 下。

    • 启动 Transact-SQL 调试器的要求例如以下:

      • SQL Server Management Studio 必须在作为 sysadmin 固定server角色成员的 Windows 帐户下执行。

      • 数据库引擎查询编辑器窗体必须使用 Windows 身份验证来连接,或使用作为 sysadmin 固定server角色成员的 SQL Server 身份验证登录名来连接。

      • 数据库引擎查询编辑器窗体必须连接到 SQL Server 2008数据库引擎的实例。假设查询编辑器窗体连接到处于单用户模式下的实例,您将无法执行调试器。

      我们建议在測试server上调试 Transact-SQL 代码,而不要在生产server上调试,原因例如以下:

      • 调试是一项须要高特权的操作。因此仅仅同意 sysadmin 固定server角色成员在 SQL Server 中进行调试。

      • 当您调查多个 Transact-SQL 语句的执行时,调试会话一般会执行非常长时间。会话获取的锁(如更新锁)可能会持有非常长时间,直到终止会话或者提交或回滚事务。

      启动 Transact-SQL 调试器可将查询编辑器窗体置于调试模式。在查询编辑器窗体进入调试模式时,调试器会在第一个代码行处暂停。然后,您能够单步运行代码,在特定 Transact-SQL 语句上暂停运行,并使用调试器窗体来查看当前运行状态。能够通过在“查询”工具栏上单击“调试”button,或在“调试”菜单上单击“启动调试”来启动调试器。

      查询编辑器窗体会保持在调试模式下,直到查询编辑器窗体中的最后一个语句完毕或您停止调试模式。能够使用下面不论什么一种方法来停止调试模式和语句运行:

      • “调试”菜单中,单击“停止调试”

      • “调试”工具栏上,单击“停止调试”button。

      • “查询”菜单上,单击“取消运行查询”

      • “查询”工具栏上,单击“取消运行查询”button。

      也可在“调试”菜单上单击“所有分离”,以停止调试模式,但同意剩余的 Transact-SQL 语句完毕运行。

    原文http://msdn.microsoft.com/zh-cn/library/cc646024(v=SQL.100).aspx

    2.在Visual Studio中调试存储过程(以VS2010为例)

    打开server资源管理器,加入一个SQL SERVER 2008数据库连接,然后在存储过程节点上点右键,选择“单步运行存储过程”,就可以进入单步调试状态,同上边过程,也要设置权限。




       大家一定在编写或分析一个复杂存错过程时,非常希望能想VB代码一样进行调试,可惜SQL Server本身并没有提供调试器,我们能够利用VS来进行调试。

       我写了一个简单的存储过程,介绍一下用VS调试存储过程的步骤。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Create PROCEDURE testProcDebugger
        @id int
    AS
    BEGIN
        declare @testVal1 int
        set @testVal1=@id
        declare @empid varchar
        declare @shipperid varchar
      
        select @empid=shipperid,@shipperid=empid from orders
        where orderid=@testVal1
      
        select @empid,@shipperid
    END

    第一步:启动Visual Studio,点“试图”->“服务资源管理器”

    第二步:加入数据连接。
        
    填写好数据库名、登录账号、和要连接的数据库,点确定。
     
    第三步:在要调试的存错过程上右键,选择“单步运行存储过程”
         
    第四步:这时调试器会依据存储过程的參数,提示你输入几个用于条数的值,然后点确定就能够进入调试状态了。
          
    如今大家就能够像调试VB代码一样,进行一步一步的跟踪了。

    第二步:加入数据连接。

    填写好数据库名、登录账号、和要连接的数据库,点确定。
     
    第三步:在要调试的存错过程上右键,选择“单步运行存储过程”

      
    第四步:这时调试器会依据存储过程的參数,提示你输入几个用于条数的值,然后点确定就能够进入调试状态了。

     
    如今大家就能够像调试VB代码一样,进行一步一步的跟踪了。



  • 相关阅读:
    Linux netstat命令详解
    createdb test时报global/pg_filenode.map不存在
    详解神经网络中的反向传播
    Android学习20--OpenGL的"mapPoints"
    C++指向常量的指针和常指针
    git合并别的分支某次提交或合并
    Java实现GB2312文件转UTF8文件
    Windows Opengl ES 环境搭建
    android学习19--Matrix.mapPoints作用
    无能量损失弹跳效果的实现
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4206731.html
Copyright © 2011-2022 走看看