`
xiaoshan5634
  • 浏览: 73872 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

SQL SERVERC存储过程中捕获异常

阅读更多

创建表t1

CREATE TABLE [dbo].[t1] (
    [Id] [int] NOT NULL ,
    [c1] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    [c2] [datetime] NULL
) ON [PRIMARY]

创建储存过程P_TestTranscation

create    procedure dbo.P_TestTranscation

as
    --   exec TestTranscation
    --   select * from t1
    --   delete from t1

declare   @iErrorCount   int
set @iErrorCount = 0
begin tran

insert into t1(Id, c1) values(1,'1')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(2,'2')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values('xxxxx9',3)
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(4,'4')
set @iErrorCount=@iErrorCount+@@Error
insert into t1(Id, c1) values(5,'5')
set @iErrorCount=@iErrorCount+@@error
if @iErrorCount <>0
begin
    select 'bbb' as t15
    ROLLBACK TRAN
    return
end

print 'aaa'
COMMIT TRAN 

此时执行

exec P_TestTranscation

 将出现将 varchar 值 'xxxxx9' 转换为数据类型为 int 的列时发生语法错误。

存储过程停止执行,存储过程自动结束,当前事物回滚。

若将

insert into t1(Id, c1) values('xxxxx9',3)改为insert into t1(Id,c1) values(1,3)

将出现违反了 PRIMARY KEY 约束 'PK_t1'。不能在对象 't1' 中插入重复键。

存储过程继续执行。
这个错误自然是出在insert这一句,只不过,出错之后,存储过程自动结束,当前事务完成会滚,后面的语句根本就不会执行,自然,事务也无法捕获这个错误了。
当Transact-SQL 语句出现运行时错误时,SQL Server 自动终止T-SqL的执行并回滚到当前事务。这是SQL Serverd的默认设置,这个设置由参数XACT-ABORT决定的。默认情况下,XACT_ABORT的值为ON,T-SQL自动终止并回滚当前事 务。XACT_ABORT值为OFF时,如果遇到外键约束等参照完整性错误时,只会回滚产生错误的T-SQL语句,而当前事务继续进行处理。而如果遇到很 严重的错误,SQL Server仍会回滚整个事务。

 

 

分享到:
评论

相关推荐

    Delphi SQL Server数据库备份程序_delphi_SQL_ServerDelphi_sqlserver_

    在描述中提到的“sqlserver 程序化备份”,意味着我们需要在Delphi应用程序中编写代码来执行SQL Server的备份任务。这可以通过以下步骤实现: 1. 连接数据库:使用ADOConnection组件,配置适当的连接字符串(如...

    .NET6WebAPI使用Sqlserver+JWT增删改查

    在本项目中,".NET6WebAPI使用Sqlserver+JWT增删改查"是一个基于最新.NET框架.NET6构建的Web应用程序示例,主要用于演示如何利用ASP.NET Core Web API与SQL Server数据库进行数据操作,以及结合JWT(JSON Web Tokens...

    在C#中附加SQL Server数据库

    4. **处理异常**: 在整个过程中,应该使用try-catch块捕获可能出现的异常,例如文件找不到、权限不足或者数据库已存在等。 5. **关闭连接**: 完成操作后,记得关闭数据库连接以释放资源。 以下是一个简单的C#代码...

    C#SQL Server

    8. 存储过程:SQL Server中的预编译SQL代码集合,可以提高性能,减少网络流量,并提供安全的模块化代码。 9. 触发器:定义在数据库表上的特殊类型的存储过程,会在特定的DML(数据操纵语言)操作如INSERT、UPDATE或...

    VB.NET 2008调用SQL存储过程并返回值示例

    在VB.NET 2008中,调用SQL Server存储过程是常见的数据库操作之一,它允许程序员通过预先定义好的数据库函数来执行复杂的数据处理任务。本示例将深入讲解如何在VB.NET中调用存储过程,包括参数传递、接收返回值、...

    sqlserver2005数据库连接java版

    - 示例中提到了对名为"S"表的操作,这通常涉及编写SQL查询或存储过程,并使用`Statement`、`PreparedStatement`或`CallableStatement`对象来执行。 - 对数据的增删改查(CRUD操作)可以通过`executeQuery()`、`...

    《Visual C++ + SQL Server数据库应用系统开发与实例》代码

    6. **错误处理**:在C++与SQL Server的交互中,需要捕获和处理可能出现的错误。这通常涉及到检查函数返回值,或者处理异常,比如ODBC的SQLGetDiagRec或ADO的Error集合。 7. **GUI设计与MFC**:如果使用MFC,你可以...

    ASP.NET自行车管理网站VS2005+SQLSERVER2005

    在这个项目中,SQL Server 2005可能被用来存储自行车的库存信息、用户信息、订单记录等。开发者可能使用T-SQL(Transact-SQL)编写查询、更新和操作数据库的语句。此外,VS2005提供了与SQL Server紧密集成的工具,如...

    c#备份sqlserver数据库.zip

    1. 错误处理:在上述代码中,我们包含了异常处理结构,以便在备份失败时捕获并报告错误。 2. 连接管理:使用`using`语句可以确保数据库连接在不再需要时被正确关闭和释放。 3. 安全性:确保连接字符串的安全性,避免...

    C#+SQL Server的简单银行管理系统

    在银行管理系统中,SQL Server 2008用于存储客户信息、账户余额、交易记录等核心数据,并提供高效的查询和更新能力。 在开发过程中,首先需要设计数据库模型,包括用户表(User)、账户表(Account)、交易表...

    微软c# SqlServer编程规范

    - **异常处理**:使用try-catch-finally结构捕获和处理异常,但避免过度使用。 - **代码审查**:定期进行代码审查,以确保一致性并发现潜在问题。 2. **SQL Server编程**: - **SQL注入**:使用参数化查询或存储...

    应用Microsoft SQL Server 7.0要注意全角(中文)逗号的使用.pdf

    例如,如果你有一个字段用于存储包含中文字符的字符串,而该字符串中包含了全角逗号,那么在使用逗号作为分隔符进行字符串处理(如Split函数)时,可能会导致分割错误,因为SQL Server会将全角逗号视为一个单独的...

    VB SQL存储过程实例

    2. **执行存储过程**:通过`ADODB.Command`对象调用SQL Server中的存储过程。 3. **参数传递**:利用`Parameters`集合向存储过程传递参数。 4. **错误处理**:采用`OnError GoTo`语句实现基本的错误捕获机制。 ####...

    ASP的数据库类 (SQL Server 版本)

    在ASP中,数据库访问是常见的需求,特别是与SQL Server这样的关系型数据库进行交互时。这个"ASP的数据库类 (SQL Server 版本)"很可能是为简化ASP与SQL Server之间的数据操作而设计的一个自定义类库。 `DBSql.inc....

    <<Visual C++ + SQL Server 数据库应用系统开发与实例>>源代码

    9. 性能优化:书中可能会讨论如何通过调整查询策略、索引设计、存储过程、批处理等方法来提高系统性能。 10. 维护与部署:了解如何备份和恢复数据库,以及如何在多台机器上部署你的应用程序和数据库,确保系统能够...

    C#语言和SQL Server数据库基础第1章.zip

    1. 数据库概念:SQL Server中的数据库是存储数据的逻辑单位,包含表、视图、存储过程等对象。 2. SQL语言:SQL(Structured Query Language)是用于操作数据库的标准语言,包括数据查询(SELECT)、数据插入...

    SQLServer2000开发者指南(pdf)

    - 如何捕获和处理存储过程中发生的错误。 - **2.15 触发器** - 触发器是一种特殊类型的存储过程,在特定事件发生时自动执行。 - **2.16 触发器编程技巧** - 如何编写有效的触发器逻辑。 #### 第3章 SQL Server...

    Java SQLServer超市管理系统.rar

    7. **异常处理**:Java中的try-catch语句用于捕获并处理可能出现的运行时错误,确保系统稳定运行。 8. **Spring框架**:可能被用来管理依赖、提供事务支持,甚至整合ORM框架,如使用Spring JDBC或Spring Data JPA。...

    基于C#及Sqlserver2008的桌面词典(本地)

    《基于C#及Sqlserver2008的桌面词典(本地)》是一个利用C#编程语言和SQL Server 2008数据库技术构建的本地桌面应用。此项目旨在为用户提供一个高效、便捷的词汇查询工具,用户可以在自己的计算机上离线使用,无需...

    JDBC连接SQL Server 2005的方法.doc

    在本文中,我们将深入探讨如何使用Java JDBC连接到SQL Server 2005数据库,以及在设置和配置过程中需要注意的关键步骤。首先,确保你已经安装了SQL Server 2005 Express Edition,并启用了TCP/IP协议,这是通过SQL ...

Global site tag (gtag.js) - Google Analytics