SQL Server 存储过程 调试指南
SQL Server 存储过程调试指南
存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存 储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来 执行它。有时人们将存储过程称为“数据库中埋头苦干的老黄牛”,它是数据库中的一个 重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。但是无论编写还是 调试存储过程都是一项复杂的工作,因此在本次技术手册中,我们将对 SQL Server 存储 过程的调试进行详细的介绍,包括了基础的调试方法和在调试过程中出现的 T-SQL 性能问 题和解决方法。
SQL Server 存储过程调试基础
本部分介绍了在 SQL Server 中使用异常处理调试存储过程的方法,并对怎样调试 TSQL 存储过程进行了详细介绍,通过对基础的学习,相信您会对存储过程的基础有个更加 深刻的了解。
 SQL Server 中使用异常处理调试存储过程(一)  SQL Server 中使用异常处理调试存储过程(二)  怎样调试 T-SQL 存储过程(一)  怎样调试 T-SQL 存储过程(二)  怎样调试 T-SQL 存储过程(三)
T-SQL 性能问题和解决方法
当应用程序用户开始遇到性能问题时,一般他们会联系数据库管理员并询问是否数据 库存在问题。导致严重性能问题的往往是编写不当的 Transact-SQL (T-SQL)代码。因此, 你必须出确定性能糟糕的查询并对它们进行优化。
TT 数据库技术专题之“SQL Server 存储过程调试指南”
Page 2 of 31
 SQL Server 中使用游标进行行处理  存储过程与嵌套查询优化  SQL Server 中的视图与 UDF 性能问题  SQL Server 不必要的记录锁  解决 SQL Server 触发器滥用问题  如何诊断和修复 T-SQL 问题
SQL Server 存储过程的修改与变更
在对 SQL Server 存储过程进行修改和变更时,往往会遇到各种各样的错误和问题, 这可能是由于与现有数据库函数冲突造成的。本部分介绍了如何对存储过程进行升级与批 量修改,而不造成错误的方法。
 批量编辑 SQL Server 存储过程  在 SQL Server 2005 中升级存储过程
TT 数据库技术专题之“SQL Server 存储过程调试指南”
Page 3 of 31
SQL Server 中使用异常处理调试存储过程(上)
异常处理被普遍认为是 T-SQL 脚本编程中的最弱的方面。幸运的是,这一点在 SQL Server 2005 中得到了改变,因为 SQL Server 2005 支持结构化异常处理。本文首先关注 新特性“TRY„„CATCH”的基本构成,然后在 SQL Server 2000 和 SQL Server 2005 中对 照着看一些 T-SQL 的例子,这些例子中使用事务代码故意制造了一些违反约束限制的情况。 将来的文章会继续探讨这一主题。 在 SQL Server 之前的版本中,你需要在执行 INSERT,UPDATE,DELETE 之后立即检查 全局变量“@@error”来处理异常,如果“@@error”变量不为零的话(表示有错误),就 接着执行一些纠正动作。开发人员常常重复这种与业务逻辑无关的代码,这会导致重复代 码块,而且需要与 GOTO 语句和 RETURN 语句结合使用。 结构化异常处理为控制具有许多动态运行时特性的复杂程序提供了一种强有力的处理 机制。目前,这种机制经实践证明是良好的,许多流行的编程语言(比如:微软的 Visual Basic.Net 和 Visual C#)都支持这种异常处理机制。接下来你会在例子中看到,采用了 这种健壮的方法以后,会使你的代码可读性和可维护性更好。TRY 块包含了可能潜在失败 的事务性代码,而 CATCH 块包含了 TRY 块中出现错误时执行的代码。如果 TRY 块中出现了 任何错误,执行流程被调转到 CATCH 块,
错误可以被处理,而出错函数可以被用来提供详 细的错误信息。TRY„„CATCH 基本语法如下: BEGIN TRY RAISERROR ('Houston, we have a problem', 16,1) END TRY BEGIN CATCH SELECT ERROR_NUMBER() as ERROR_NUMBER, ERROR_SEVERITY() as ERROR_SEVERITY, ERROR_STATE() as ERROR_STATE, ERROR_MESSAGE() as ERROR_MESSAGE END CATCH
TT 数据库技术专题之“SQL Server 存储过程调试指南”
Page 4 of 31
注意上面脚本中函数的用法,我们可以用它们代替局部变量和(或者)全局变量。这 些函数只应该被用在 CATCH 块中,函数功能说明如下: ERROR_NUMBER() 返回错误数量。 ERROR_SEVERITY() 返回错误严重等级。 ERROR_STATE() 返回错误状态号。 ERROR_PROCEDURE() 返回出错位置存储过程或者触发器的名称。 ERROR_LINE() 返回程序中引起错误的行号。 ERROR_MESSAGE() 返回错误信息的完整文本。错误内容包括可替换参数的值,比如: 长度,对象名称或者时间。 我会先用 SQL Server 2000 演示一个简单例子,然后演示一个 SQL Server 2005 异常 处理的例子。 下面是一个简单的存储过程示例,先用 SQL Server 2000 编写,然后改用 SQL Server 2005 实现。两者都从简单的表开始,我们在对这些表执行插入操作时会
违反约束限制。下 面是表结构: create table dbo.Titles (TitleID int Primary Key identity, TitleName nvarchar(128) NOT NULL, Price money NULL constraint CHK_Price check (Price > 0)) create table dbo.Authors (Authors_ID int primary key identity, au_fname nvarchar(32) NULL, au_lname nvarchar(64) NULL, TitleID int constraint FK_TitleID foreign key references Titles(TitleID), CommissionRating int constraint CHK_ValidateCommissionRating Check (CommissionRating between 0 and 100)) create table dbo.Application_Error_Log (tablename sysname,
TT 数据库技术专题之“SQL Server 存储过程调试指南”
Page 5 of 31foreign key references用法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。