存储过程系列之调试存储过程 SQL Server 2005

在数据库中直接调试
  在数据库中直接调试是调试SQL Server 2005的存储过程的最简单的方法。 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单步执行了,同时你也可以检查和修改存储过程内的T-SQL变量和参数。本文结尾处提供下载的压缩包中包括一个SQL Server 2005 Express版本的Northwind数据库。我在其中添加了一个名为“DoThings”的存储过程,它有一个参数@CategoryID。这是一个没什么实用价值的存储过程,但是它有很多的T-SQL语句和变量,另外还有一个参数,这将使我们能更好地练习存储过程的调试。

服务器资源管理器中右键单击“DoThings”存储过程,然后选择单步执行存储过程的选项。 (注意:SQL Server调试只有Team Systems和Professional版本的Visual Studio才支持。)

  调试器启动并且执行存储过程。因为存储过程“DoThings”需要一个传入值给@CategoryID,所以会弹出一个对话框让我们提供该值。输入1后单击OK。

首先会执行第一条语句。你可以选择逐语句或逐过程进行调试(快捷键分别为F11和F10),也可以在监视窗口中添加参数和变量。存储过程调试期间的截屏如下图所示。左侧的黄色箭头指的是当前执行的语句。监视窗口中显示的是@CategoryID和@AvgPrice的类型和值。

  存储过程知行完后,结果会显示在输出窗口中。

你可以看到,在数据库中直接调试存储过程是非常简单的,而且很好理解。简单到你只需要在服务器资源管理器中,右键单击存储过程,然后选择单步执行存储过程即可。

在ASP.NET程序中调试数据库对象
  数据库中直接调试可以让我们非常简单地在Visual Studio IDE里直接调试存储过程。但是,有的时候我们需要在ASP.NET程序调用相关的存储过程的时候再调试。这样,当某个数据库对象被调用的时候,我们就可以对其进行调试。

这种调试方法整合到了应用程序的调试之中。 要使用它需要做如下几步:
  ·给你想要调试的数据库对象添加断点。 数据库对象只有在包含断点的情况下才会被调试。例如,一般情况下,应用程序在调用存储过程的时候,你是不能进入存储过程内部的,如果你想调试存储过程,那就必须要在存储过程内部设置断点。
  ·配置应用程序,使其可以调试SQL Server对象。这个比较容易,你只要选中一个复选框即可。
  ·禁用连接池。 连接池可以提高性能,它允许程序使用一个连接池中的某个空闲的连接来连接数据库。如果启用它,就不能正确地调试了。因为默认情况下是启用连接池的,所以我们必须在设置连接字符串的时候禁用它。(当你完成了在ASP.NET程序中调试SQL Server对象的工作之后,一定要记得重新启用连接池)

接下来让我们来看一看这几个步骤具体该如何做。

首先,在Visual Studio中打开“DoThings”存储过程,然后在“DECLARE @AvgPrice money”这句上设置断点。 这样第一步就完成了,接下来做第二步。

配置ASP.NET程序,以使其支持SQL Server的调试。右键单击项目,然后选择属性。此时将会弹出一个如下图所示的对话框。 选择启动选项,然后在“调试器”部分中选中“SQL Server”复选框。这样就完成前两步了,还差最后一步。

  最后一步,我们需要修改连接字符串,使其禁用连接池。这个任务相当简单,你只要在你的连接字符串后加一个属性“Pooling=false”即可。假设你将连接字符串信息定义在了Web.config的<connectionString>节点里,那么修改后的连接字符串如下所示:

 

<connectionStrings> <add name="NorthwindConnectionString" connectionString="Data Source=./SQLEXPRESS;AttachDbFilename=|DataDirectory|/NORTHWND.MDF;Integrated Security=True;User Instance=True; Pooling=false" providerName="System.Data.SqlClient"/> </connectionStrings>

现在,我们已经完成了这3个步骤。 为了演示如何调试,我们来创建一个调用“DoThings”存储过程的ASP.NET页。本文结尾处你下载的Demo中就包含有这个页面。当你调试ASP.NET程序并且访问了这个页的时候,程序就会暂停在存储过程中设置了断点的地方。然后,你就可以单步执行存储过程,并且可以在监视窗口中查看和修改参数和变量的值,就像在数据库中直接调试存储过程一样。

结论
  在SQL Server之前的版本中有一套用于调试存储过程的独立工具。 到了现在的SQL Server 2005,存储过程、触发器和用户自定义函数(UDFs)都是通过Visual Studio Team System和Professional版本来调试的。 它给我们带来了3种调试SQL Server的方法:数据库中直接调试、应用程序调试和在SQL Server项目中调试。本文中,我们一起研究了前两种调试方法(使用本地数据库)。

时间: 2024-10-18 11:41:05

存储过程系列之调试存储过程 SQL Server 2005的相关文章

解密SQL SERVER 2005加密存储过程,函数

在SQL SERVER 2005中必须用专用管理连接才可以查看过程过程中用到的表 EG:sqlcmd -A 1>use test 2>go 1>sp_decrypt 'p_testa' 2>go Text----------------------Create procedure P_testa with encryption as select * from test create PROCEDURE [dbo].[sp_decrypt] (@procedure sysname

22. SQL -- SQL Server 2005 和SQL Server 2008新特性

SQL SERVER 2005 与SQL SERVER 2008 新特性   SQLSERVER 2005 新特性 Enhanced Data Types:存储最大8K-2G Partitioned Table(分区表):数据拆分管理 背景:一个公司,有目前现存数据以及历史数据,各在一台SER 上,服务器访问方式: SQL 2000 TABLE 1:在一张table 中,对数据进行分区 Enhanced Indexing Features SER 1 SER 2 现存数据 TABLE 1 TAB

sql server 2005 数据库迁移问题总结——"错误15023:当前数据库中已存在用户或角色"

在数据库迁移过程中,如何设置不好用户与登录,会造成"错误15023:当前数据库中已存在用户或角色". 现在整理下思路: 1.在原数据库进行数据库备份 ***.bak 文件: 2.在新建数据库,建立与原数据库相同的登录名: 3.在新数据库上恢复备份的数据库文件 ***.bak 文件:选择覆盖原数据库文件: 4.将数据库恢复到其他服务器时,需要处理"孤立用户"的问题.具体解决办法如下: 用户和权限,但可能没有相应的登录或者登录所关联的用户可能不是相同的用户.这种情况被称

如何在 SQL Server 2005 实例之间传输登录和密码

简介 0" style="box-sizing: border-box; outline: none; margin-right: auto; margin-left: auto; max-width: 1600px; width: 761.391px;"> 本文介绍如何在不同服务器上的 Microsoft SQL Server 2005 实例之间传输登录和密码. 有关如何在其他版本的 SQL Server 实例之间传输登录和密码的更多信息,请单击下面的文章编号,以查看

监控 SQL Server (2005/2008) 的运行状况--来自微软TetchNet

原文地址:http://technet.microsoft.com/zh-cn/library/bb838723.aspx Microsoft SQL Server 2005 提供了一些工具来监控数据库.方法之一是动态管理视图.动态管理视图 (DMV) 和动态管理函数 (DMF) 返回的服务器状态信息可用于监控服务器实例的运行状况.诊断问题和优化性能. 常规服务器动态管理对象包括: dm_db_*:数据库和数据库对象 dm_exec_*:执行用户代码和关联的连接 dm_os_*:内存.锁定和时间

删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005,

原文:删除指定表的所有索引,包括主键索引,唯一索引和普通索引 ,适用于sql server 2005, --删除指定表中所有索引 --用法:declare @tableName varchar(100) --set @tableName='表名' --表名 ,根据实际情况替换 --exec sp_dropindex @tableName if exists(select 1 from sysobjects where id = object_id('dropindex') and xtype =

SQL SERVER 2005中同义词实例

From : http://www.cnblogs.com/jackyrong/archive/2006/11/15/561287.html 在SQL SERVER 2005中,终于出现了同义词了,大大方便了使用.下面举个小例子说明 同义词是用来实现下列用途的数据库对象: 为本地或远程服务器上的另一个数据库对象(称为“基对象”)提供备选名称. 提供一个提取层,该层防止客户端应用程序的基对象的名称或位置被更改. 例如,名为 Server1 的服务器上有 Adventure Works 的 Empl

SQL Server 2005 中的同义词

From : http://blog.csdn.net/itblog/article/details/752881 =============创建同义词 可以为下列对象类型创建同义词: 程序集 (CLR) 存储过程 程序集 (CLR) 表值函数 程序集 (CLR) 标量函数 程序集聚合 (CLR) 聚合函数 复制筛选过程 扩展存储过程 SQL 标量函数 SQL 表值函数 SQL 内联表值函数 SQL 存储过程 视图 表1(用户定义) 1 包括本地和全局临时表 不支持使用函数基对象的四部分名称.

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历

使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 原文:使用XML向SQL Server 2005批量写入数据——一次有关XML时间格式的折腾经历 常常遇到需要向SQL Server插入批量数据,然后在存储过程中对这些数据进行进一步处理的情况.存储过程并没有数组.列表之类的参数类型,使用XML类型可妥善解决这个问题. 不过,SQL Server2005对标准xml的支持不足,很多地方需要特别处理.举一个例子说明一下. 这个场景是往存储过程里传递一个xml