当前位置: 网学 > 编程文档 > SQL SERVER > 正文

SQL Server 2005 Beta 2 Transact-SQL 增强功能(三)

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
s''.
Error Severity: 14
Error State : 1
Exiting CATCH block.
After TRYCATCH block.

请注意,TRY 块被进入,但未完成。作为主键冲突错误的结果,控制被传递给 CATCH 块,该块会识别并处理该错误。类似地,如果您分配的值不是有效的雇员 ID 数据,例如,0(它违反了 CHECK 约束)、NULL(它不允许在 employeeid 中使用)以及 ''a,''(它无法转换为 INT),则您会得到相应的错误,并且会激活相应的处理代码。

如果您要在 TRY 块中使用显式事务,则您可能希望在 CATCH 块中的错误处理代码中调查事务状态,以确定操作过程。SQL Server 2005 提供了新的函数 XACT_STATE() 以返回事务状态。该函数可能返回的值为:0、-1 和 1。0 返回值意味着没有打开任何事务。试图提交或回滚该事务时,会生成错误。1 返回值意味着事务已打开,并且可以提交或回滚。您需要根据自己的需要和错误处理逻辑确定是提交还是回滚该事务。-1 返回值意味着事务已打开但处于无法提交的状态 — 这是 SQL Server 2005 中引入的新的事务状态。当生成可能会导致事务被中止的错误(通常,严重度为 17 或更高)时,TRY 块内的事务会进入无法提交的状态。无法提交的事务会保持所有打开的锁,并且只允许您读取数据。您不能提交任何需要写事务日志的活动,这意味着当事务处于无法提交的状态时,您无法更改数据。为了终止该事务,您必须发出回滚。您不能提交该事务,而只能在可以接受任何修改之前将其回滚。以下示例演示了如何使用 XACT_STATE() 函数:

BEGIN TRY
BEGIN TRAN
INSERT INTO Employees(empid, empname, mgrid) VALUES(3, ''Emp3'', 1)

/* other activity */
COMMIT TRAN
PRINT ''Code completed successfully.''
END TRY
BEGIN CATCH
PRINT ''Error: '' + CAST(ERROR_NUMBER() AS VARCHAR(10)) + '' found.''
IF (XACT_STATE()) = -1
BEGIN
PRINT ''Transaction is open but uncommittable.''
/* investigate data */
ROLLBACK TRANSACTION -- can only ROLLBACK
/* handle the error */
END
ELSE IF (XACT_STATE()) = 1
BEGIN
PRINT ''Transaction is open and committable.''
/* handle error */
COMMIT TRANSACTION -- or ROLLBACK
END
ELSE
BEGIN
PRINT ''No open transaction.''
/* handle error */
END
END CATCH

TRY 块在显式事务内部提交代码。它插入一个新的雇员行,并且在同一事务内部执行其他一些活动。CATCH 块输出错误编号,并且调查事务状态以确定操作过程。如果事务已打开并且无法提交,则 CATCH 块会调查数据,回滚该事务,然后采取任何需要数据修改的纠正性措施。如果该事务已打开并且可以提交,则 CATCH 块会处理错误并提交(也可能回滚)。如果没有任何事务打开,则错误被处理。不会发出任何提交或回滚。如果您是首次运行该代码,则会插入对应于雇员 3 的新的雇员行,并且代码成功完成,产生以下输出:

Code completed successfully.

如果您是第二次运行该代码,则会生成主键冲突错误,并且您会获得以下输出:

Error: 2627 found.
Transaction is open and committable.

返回页首

其他影响 Transact-SQL 的 SQL Server 2005 Beta 2 功能
本节简要描述 SQL Server 2005 Beta 2 中的其他影响 Transact-SQL 的增强功能。这包括对 TOP 进行的增强、带结果的数据操纵语言 (DML)、动态列的 MAX 说明符、XML/XQuery、数据定义语言 (DDL) 触发器、队列和 SQL Server Service Broker 以及 DML 事件和通知。

TOP 增强功能

在 SQL Server 版本 7.0 和 SQL Server 2000 中,可以通过 TOP 选项限制 SELECT 查询所返回的行数或百分比;但是,您必须提供一个常量作为参数。在 SQL Server 2005 Beta 2 中,TOP 用下列主要方式进行了增强:

现在可以指定一个数字表达式,以返回要通过查询影响的

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号