mssql 事务处理- 2例

例一:

declare @iErrorCount int
set @iErrorCount = 0
begin tran Tran_2008_10_07
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(‘xxxx3′,’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
COMMIT TRAN Tran_2008_10_07
end
else
begin
ROLLBACK TRAN Tran_2008_10_07
end

 
例二:

begin try
begin tran Tran_2008_10_07
insert into t1(Id, c1) values(1,’1′)
insert into t1(Id, c1) values(2,’2′)
insert into t1(Id, c1) values(‘xxxx3′,’3′)
insert into t1(Id, c1) values(4,’4′)
insert into t1(Id, c1) values(5,’5′)
COMMIT TRAN Tran_2008_10_07
end try
begin catch
raiserror 50005N’出错了’
ROLLBACK TRAN Tran_2008_10_07
end catch

备注:
@@error是系统函数,当没有发生错误时返回0,如果发生错误时@@error<>0,并返回错误号,每个SQL语句执行完,@@error值都会变。
另: @@error只记录当前错误
 
附:SQL Server @@参数一览表
 

–返回 SQL Server 自上次启动以来尝试的连接数,无论连接是成功还是失败。
SELECT @@CONNECTIONS AS CONNECTIONS
–返回 SQL Server 自上次启动后的工作时间。其结果以 CPU 时间增量或“滴答数”表示,
–此值为所有 CPU 时间的累积,因此,可能会超出实际占用的时间。乘以 @@TIMETICKS 即可转换为微秒。
,@@CPU_BUSY AS CPU_BUSY
–返回连接上打开的上一个游标中的当前限定行的数目。
–为了提高性能,Microsoft SQL Server 可异步填充大型键集和静态游标。
–可调用 @@CURSOR_ROWS 以确定当其被调用时检索了游标符合条件的行数。
,@@CURSOR_ROWS AS CURSOR_ROWS
–针对会话返回 SET DATEFIRST 的当前值。SET DATEFIRST 表示指定的每周的第一天。美国英语中默认 7 对应星期日。
,@@DATEFIRST AS _DATEFIRST
–SET LANGUAGE italian
–SELECT @@DATEFIRST
–SET LANGUAGE us_English
–SELECT @@DATEFIRST
–返回当前数据库的当前 timestamp 数据类型的值。这一时间戳值在数据库中必须是唯一的。
,@@DBTS AS DBTS
–返回执行的上一个 Transact-SQL 语句的错误号。
,@@ERROR AS ERROR
–返回针对连接当前打开的任何游标发出的上一条游标 FETCH 语句的状态
,@@FETCH_STATUS AS FETCH_STATUS
–返回最后插入的标识值的系统函数
,@@IDENTITY AS _IDENTITY
–返回 SQL Server 自上次启动后的空闲时间。结果以 CPU 时间增量或“时钟周期”表示,
–并且是所有 CPU 的累积,因此该值可能超过实际经过的时间。乘以 @@TIMETICKS 即可转换为微秒
,@@IDLE AS IDLE
–返回自从 SQL Server 最近一次启动以来,SQL Server 已经用于执行输入和输出操作的时间。
–其结果是 CPU 时间增量(时钟周期),并且是所有 CPU 的累积值,所以,它可能超过实际消逝的时间。
–乘以 @@TIMETICKS 即可转换为微秒
,@@IO_BUSY AS IO_BUSY
–返回当前使用的语言的本地语言标识符 (ID)。
,@@LANGID AS LANGID
–返回当前所用语言的名称
,@@LANGUAGE AS LANGUAGE
–返回当前会话的当前锁定超时设置(毫秒)。
–SET LOCK_TIMEOUT 允许应用程序设置语句等待阻塞资源的最长时间。
–当一条语句等待的时间长度超过 LOCK_TIMEOUT 所设置的时间长度时,
–被锁住的语句将自动取消,并给应用程序返回一条错误消息。
,@@LOCK_TIMEOUT AS _LOCK_TIMEOUT
–返回 SQL Server 实例允许同时进行的最大用户连接数。返回的数值不一定是当前配置的数值
,@@MAX_CONNECTIONS AS MAX_CONNECTIONS
–按照服务器中的当前设置,返回 decimal 和 numeric 数据类型所用的精度级别
,@@MAX_PRECISION AS MAX_PRECISION
–返回对本地服务器上执行的当前存储过程的嵌套级别(初始值为 0)。
,@@NESTLEVEL AS NESTLEVEL
–返回有关当前 SET 选项的信息
,@@OPTIONS AS OPTIONS
–返回自上次启动 SQL Server 后,在 SQL Server 连接上发生的网络数据包错误数
,@@PACKET_ERRORS AS PACKET_ERRORS
–返回 SQL Server 自上次启动后从网络读取的输入数据包数
,@@PACK_RECEIVED AS PACK_RECEIVED
–返回 SQL Server 自上次启动后写入网络的输出数据包个数
,@@PACK_SENT AS PACK_SENT
–返回 Transact-SQL 当前模块的对象标识符 (ID)。Transact-SQL 模块可以是存储过程、用户定义函数或触发器。
–不能在 CLR 模块或进程内数据访问接口中指定 @@PROCID
,@@PROCID AS PROCID
–返回远程 SQL Server 数据库服务器在登录记录中显示的名称
,@@REMSERVER AS REMSERVER
–返回受上一语句影响的行数。如果行数大于 20 亿,请使用 ROWCOUNT_BIG
,@@ROWCOUNT AS _ROWCOUNT
–返回运行 SQL Server 的本地服务器的名称
,@@SERVERNAME AS SERVERNAME
–返回 SQL Server 正在其下运行的注册表项的名称。若当前实例为默认实例,则 @@SERVICENAME 返回 MSSQLSERVER;
–若当前实例是命名实例,则该函数返回该实例名
,@@SERVICENAME AS SERVICENAME
–返回当前用户进程的会话 ID
,@@SPID AS SPID
–返回 SET 语句中的 TEXTSIZE 选项的当前值。
–该值指定 SELECT语句返回的 varchar(max)、nvarchar(max)、varbinary(max)、text 或 image 数据的最大长度。
,@@TEXTSIZE AS _TEXTSIZE
–返回每个时钟周期的微秒数。
,@@TIMETICKS AS TIMETICKS
–返回自上次启动 SQL Server 之后 SQL Server 所遇到的磁盘写入错误数
,@@TOTAL_ERRORS AS TOTAL_ERRORS
–返回 SQL Server 自上次启动后由 SQL Server 读取(非缓存读取)的磁盘的数目
,@@TOTAL_READ AS TOTAL_READ
–返回自上次启动 SQL Server 以来 SQL Server 所执行的磁盘写入数
,@@TOTAL_WRITE AS TOTAL_WRITE
–返回当前连接的活动事务数
,@@TRANCOUNT AS TRANCOUNT
–返回当前的 SQL Server 安装的版本、处理器体系结构、生成日期和操作系统
,@@VERSION AS VERSIO

发表评论

邮箱地址不会被公开。 必填项已用*标注