SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

SQL SERVER2012实现了类似C#抛出异常的Throw语句。相比较于SQL Server2005之前使用@@ERROR,和SQL Server2005之后使用RAISERROR()引发异常都是一个不小的进步.

1.SQL Server2005/2008中,使用RAISERROR和TRY…CATCH语句来抛出异常相比较根据@@ERROR进行判断来讲已经进步了很多。但是使用RAISERROR有一个非常不好的一点是无法返回真正出错的行数。

--使用RAISERROR返回错误行数不正确
begin tran
BEGIN TRY
    select 1/0;
commit
END TRY

begin catch
    rollback
    raiserror(‘自定义错误信息‘,12,1)
    print error_message();--遇到以零作除数错误。
end catch

2.使用SQL SERVER2012新增的THROW语句,则变得简单很多。并且能正确返回出错的行,对于比较长的T-SQL语句来说,这节省了不少时间.

--使用throw返回正确行数
begin tran
BEGIN TRY
    select 1/0;
commit
END TRY

begin catch
    rollback;
    throw
end catch

时间: 2024-09-29 10:25:25

SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较的相关文章

SQL SERVER2012中使用游标来备份数据库

在SQL SERVER中,添加JOB,可以使用以下语句设置定期备份数据库. DECLARE @name VARCHAR(50)--databasename DECLARE @path VARCHAR(256)--pathforbackupfiles DECLARE @fileName VARCHAR(256)--filenameforbackup DECLARE @fileDate VARCHAR(20)--usedforfilename SET @path='E:\Backup' SELECT

MS SQL Server2012中的EOMONTH函数

这个函数是获取一个指定日期所在月份最后一天的日期.可以得到某一个月月份的最后一天 如: declare @orderdate date='2014-8-9'SELECT EOMONTH(@orderdate) AS LastDay MS SQL Server2012中的EOMONTH函数

Sql server中内连接语句

数据库中学生表和课程表如下: 内连接sql语句: select a.studentName,a.studentAge,b.courseName from student a inner join course b on a.studentID=b.studentID 查询结果如下: 查询的结果是以从表course为主,没有就不显示.

SQL server中的T-SQL语句

首先点击新建查询 如下图所示 创建数据库:create database 数据库名称 使用数据库:use 数据库名称 创建表:create table 表名 ( 代码 ) 输入完成执行时需选中 如果需要多条语句一起执行,则需要在后面+“go” 例如: create database 数据库名称 go use 数据库名称 go create table 表名 ( 代码 ) 代码中需要的关键字: primary key 主键unique 唯一键not null 非空references 外键关系(引

SQL Server2012中如何通过bak文件还原SQL Server2012数据库

1 登陆完数据库后,不要新建数据库,直接点击“数据库”然后右击"还原数据库". 2 在"源"选项中选择"设备". 3 选择相应的bak文件并进行添加. 4 添加完之后点击确定,注意在目标这一栏中数据库名称都可以不用写,注意勾选要还原的数据集. 5 点击"确定"还原备份的数据库. 注意:在还原的时候注意一点就是不用首先就将该数据库建好,这样还原的时候可能由于备份的bak文件和新建的数据库的数据表不同,所以往往造成还原错误,所以一

SQL Server2012 T-SQL对分页的增强尝试

简介 SQL Server 2012中在Order By子句之后新增了OFFSET和FETCH子句来限制输出的行数从而达到了分页效果.相比较SQL Server 2005/2008的ROW_Number函数而言,使用OFFSET和FETCH不仅仅是从语法角度更加简单,并且拥有了更优的性能(看到很多人下过这个结论,但我测试有所偏差,暂且保留意见). MSDN上对于OFFSET和FETCH的详细描述可以在(http://msdn.microsoft.com/en-us/library/ms18838

SQL Server中【case...end】的用法

在SQL Server中 case...end 语句,一般有如下两种用法: 1.相当于C#中if...else,例: 1 select CName,头衔=case 2 when CLevel='A1' then '初级程序员' 3 when CLevel='A2' then '中级程序员' 4 when CLevel='A3' then '高级程序员' 5 else '骨灰级大师' 6 end 7 from Coder 这种写法可以用来做区间或等值的判断. 2.相当于C#中的switch...c

pl/sql查看后台数据库执行语句

由于项目的原因,需要查看后台代码执行的查询语句以及检查其逻辑是否正确: 步骤:(1).首先在数据库里面刷新共享此 --刷新共享池alter system flush shared_pool; (2).在界面中操作你要查看后台直接的功能: (3).在PL/SQL数据库中执行以下语句: --查询用户最近执行的SQLselect sql_fulltext from v$sql where parsing_schema_name = '数据库名称' order by last_load_time;

SQL Server ->> THROW字句对比RAISERROR字句

SQL Server 2012开始引入了THROW字句用于替代从SQL Server开始沿用至今的RAISERROR.既然作用相同,都是在TRY... CATCH代码块后不抓错误然后抛出错误,它们之间的差异是什么? RAISERROR statement THROW statement If a msg_id is passed to RAISERROR, the ID must be defined in sys.messages. The error_number parameter doe