SQL存储过程调试

转自:http://www.cnblogs.com/xiangzhong/archive/2012/10/27/2742974.html

今天突然有同事问起,如何在sqlserver中调试存储过程(我们公司使用的是sqlserver 2008 R2),猛地一看,和以前使用sqlserver 2000真的有很大的不同,我真晕了。

于是琢磨了一下。SQLSERVER 2005中不知因何去掉了很重要的DEBUGGER功能,要调试,必须要安装VS2005专业版或者更高版本。非常不方便。

还好,SQLSERVER 2008中这个很重要而且方便的功能又回来了。

不过,SQLSERVER 2008的调试功能和SQL2000的方法差别很大。SQL2000是在查询分析器中的对象浏览器中选中需要调试的存储过程,右键----调试---输入参数开始调试。

sqlserver2008中则完全不同,变成了必须要在SSMS中EXEC [PROCEDURE NAME] @VAR1,@VAR2,然后点绿色三角或者点菜单中的调试---启动调试。然后点工具栏的最右边的单步调试或者跳出等。下面的变量窗口和堆栈窗口等可以查看调试中变量等动态变化值。

sqlserver2008调试的要求和条件:如果在引擎所在的电脑或服务器上调试,则只需要SA或者WINDOWS用户登陆即可。如果是异地调试,则需要设置防火墙例外,增加SSMS和SQLSERVER.EXE为允许,增加135端口允许通过。

总之,SQL2008的调试比2000操作起来麻烦多了,要求也多了。刚开始感觉不如2000的好用,也可能是使用2000习惯了。习惯是可怕的,但是微软是在不断进步的...

一、回顾早期的SQL SERVER版本:

早在SQL Server 2000时代,查询分析器的功能还很简陋,远不如VS那么强大。到SQL Server 2005时代,代码高亮、SQL优化等功能逐渐加强,但是依然无法调试SQL语句。好一点的第三方的SQL语法编辑器似乎也不够完美,这样导致一些人抱怨存储过程不便于维护,开发的时候能不用则不用。

二、SQL Server 2008 Express 智能提示加强:

该功能是SQL2008在SQL Server 2005之后的升级版,我们可以很方便的调用智能提示,和 VS一致:使用快捷键ctrl + J 即可。

截图如下:

该功能是否与VS一样了呢? 毕竟他们都是微软的产品。

三、调试T-SQL语句:

1.Debug普通T-SQL语句:

SQL代码如下:

  1. use northwind
  2. go
  3. declare @i int ,@j int,@k int
  4. set @i = 1;
  5. set @j = 2;
  6. set @[email protected] + @j
  7. select @i;
  8. go

非常简单的定义了 三个int 型变量:i、j、k并且对这些变量进行简单的逻辑运算,在Management Studio 中只要轻松的按F11键,即可调试以上代码块。

截图如下:

接着点击F11逐语句debug 或者F10逐过程调试代码。

截图如下:

这个dubug的场面您是否觉得已经和VS相差无几了呢?

四、支持复杂存储过程嵌套debug:

您可能会疑问,在一个庞大的系统中,如果数据库逻辑绝大部分都是存储过程实现的情况下,会出现存储过程嵌套存储过程或者嵌套存储函数这样的代码。

SQL2008是否支持调试功能呢?答案是肯定的。

首先定义一个简单的存储过程(本文使用NorthWind数据库)代码如下:

  1. CREATE procedure sp_getOrders
  2. @orderID int = null
  3. as
  4. if (@orderID is null )
  5. begin
  6. print ‘null‘
  7. end
  8. else
  9. begin
  10. print ‘correct‘
  11. end
  12. select * from Orders whereOrderID = @orderID
  13. go

该存储过程在以下批处理内被调用,代码如下:

  1. declare @i int ,@j int,@k int
  2. set @i = 1;
  3. set @j = 2;
  4. select @[email protected] + @j
  5. exec sp_getOrders 10248
  6. select @i;
  7. go

F11对以上代码进行SQL Debug。

截图如下:

当断点经过exec sp_getOrders 10248 这段代码时,点击F11进入sp_getOrders存储过程进行逐语句debug。

截图如下:

这样可以在嵌套的存储过程或函数内进行debug了,此刻不得不承认: 升级后的SQL2008越来越强大。您还恐惧使用或者调试存储过程么?

原文来自 http://blog.csdn.net/dinglang_2009/article/details/6887413

时间: 2024-08-04 20:46:45

SQL存储过程调试的相关文章

sql存储过程和事务的应用

在去年,学习数据库的时候就学过存储过程了.一直都只知道一些理论,却不知道如何去使用.时隔一年,终于找到如何使用存储过程了. 在机房收费系统中,有些操作,需要多次执行sql语句,多次执行完成才算是完成这个事件流.但是如果其中有一个环节出了错误,那么没出错误的那些操作是不是就多余了. 执行存储过程,就是执行多句SQl语句.而事务,是为了控制这些语句 要么都做,要么 都不做. 在机房收费系统中,执行sql语句的时候. 一般的sql语句使用方法:定义一个字符串,用于存放sql语句.之后指明command

40. SQL -- 存储过程(1)

存储过程 存储过程的定义 存储过程(StoredProcedure)是一组为了完成特定功能的SQL 语句集,是利用SQLServer 所提供的Transact-SQL语言所编写的程序.功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来,以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令.存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量 .

存储过程调试

SQL SERVER2008存储过程调试 昨天被问到sql server中存储过程怎么调试,我曾经写存储过程,调试方法非常笨拙,就是逐条运行语句,然后查看结果是不是预期的,这样的调试方法,实在是无奈之举,极大程度地限制了开发速度和准确性.今天在他的提点下,研究了下SQL SERVER 2008的存储过程调试. 1.在SQL SERVER2008中调试存储过程 下面内容引自MSDN SQL SERVER 2008的SSMS是支持单步debug的,可是在调试之前必须配置权限. 假设 SQL Serv

SQL存储过程和函数

SQL存储过程: 由来:在具体应用中,一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句.因此,mysql提供了数据库对象存储过程和函数. 定义:存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令.和函数的区别在于,函数有返回值,存储过程没有. 优点: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度.2.当对数据库进行复杂操作时,

插入订单并且输出订单号的sql存储过程

--插入订单-- create proc InsertOrders ( @OrderNumber varchar(300), @OrderState varchar(30), @OrderType varchar(30), @OrderTime DateTime, @OrderFirm varchar(300), @OrderMoney decimal(8,2), @SendWayMoney decimal(8,2), @RegisterId int, @CoalitionOrdersId in

创建sql自定义的函数及商品分页sql存储过程

--商品筛选时判断品牌ID是否存在 --select dbo.isValite(94,94)create function isValite(@brandId int,@bId int)returns intas begin Declare @rNumber int if @brandId = @bId set @rNumber = 1 else set @rNumber = 0 if @bId = 0 set @rNumber = 1 return @rNumberendgo --判断商品筛选

SQL 存储过程 分页

set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: *** -- Create date: 2014-03-27 20:00 -- Description: 采用最新的 row_number() over 技术高效分页方法 -- ============================================= ALTER PRO

SQL 存储过程入门(事务)(四)

SQL 存储过程入门(事务)(四) 本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了.我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用. 一,sql事务定义 所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作

SQL存储过程实例详解

SQL存储过程实例详解 本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能. 题目1 学校图书馆借书信息管理系统建立三个表: 学生信息表:student 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(50) 专业 图书表:book 字段名称 数据类型 说明 stuID char(10) 学生编号,主键 stuName Varchar(10) 学生名称 major Varchar(