SQL Server 中 RAISERROR 的用法详细介绍

来源:脚本之家  责任编辑:小易  

raiserror的作用是弹出错误信息弹出错误信息,也可以自定义信息内容rollback

 SQL Server 中 RAISERROR 的用法

都是字符串,直接拿加号+连接就可以了。比如等等,你这@a不是字符串,要做一次转换raiserro

raiserror 的作用: raiserror 是用于抛出一个错误。[ 以下资料来源于sql server 2005的帮助 ]

RAISERROR代码是不会中断下面代码执行的,加个return试试create trigger

其语法如下:

RAISERRORRAISERROR命令用于在SQL Server系统返回错误信息时同时返回用户

执行以下下面代码。这样就可以了。 declare @x intset @x = 1

RAISERROR ( { msg_id | msg_str | @local_variable } { ,severity ,state } [ ,argument [ ,...n ] ] ) [ WITH option [ ,...n ] ]

起亚索兰托对于音响配置方面比较简单,没有什么很明显的音质特点,听起来平淡无奇,高音不通透,就像炒菜没有放佐料一样,因此对于有着追求更高品质的发烧友车主来说,原车的配置是远远不够的。在音响配置上,音源采用阿尔派CDA-9835J主机;喜力士(HeliX)H236套装作前声场喇叭,喜力士B62C作后声场喇叭,喜力士P10W作为低音喇叭,用德国喜力士三件套缔造德国经典传奇;用麦仕MA40FX和麦仕MA10FX功放推动。阿尔派CDA-9835J主机安装在前台的左侧车门佳音隔音前声场高音单元安装在A柱德国喜力士H236中低音喇叭后声场高音单元安装在车门德国喜力士B62C中低音喇叭两个来福电容和两台麦仕功

简要说明一下:

在使用手机过程,是否出现有信号(3G、4G、WiFi)无法上网且上网慢的情况?首先排除信号不好、手机欠费、流量用光、没启用数据流量等基本客观原因,不在本次经验讨论之内。方法/步骤网络吊死或手机长时间运行导致  至于什么是网络吊死,我也不知道来自10086短信提醒.也许是指:“网络屌丝”吧。  短信提示:只需要将手机飞行模式调出来,打开再关闭,然后再清除一下缓存,可以是调整系统运行环境到最佳吧,因为最后还有一句:“如何还是不行,建议关机重启”,多么熟悉的基本操作啊,在电脑上问题上听到最多的就是“重启一下试试”,这句话到手机上也是这么实用啊。  至于是什么原因导致网络吊死,请致电10086解释一下

  第一个参数:{ msg_id | msg_str | @local_variable }

既然题主是女孩子,那小主就按照颜值来推荐了。小主会为你推荐凯迪拉克ATS-L,因为小主觉得凯迪拉克的钻石切割设计应该挺招女孩子喜欢的,在加上凯迪拉克ATS-L在进口版本凯迪拉克ATS基础上,凯迪拉克ATS-L不但实现了轴距加长,更通过国产化进一步降低了售价区间,从而成为通用旗下豪华中型车领域的绝对主力。凯迪拉克ATS-L外观虽然针对ATS车型有一定变化,但都是体现在细节方面,包括中网格栅、前下包围造型等等。总体来说,凯迪拉克ATS-L和ATS以及所有的旗下同胞一样,都是硬朗线条塑造出的“钻石切割”工艺风格。需要指出的是,加长后的凯迪拉克ATS-L车身侧面并未破坏原有协调感,反而凸显干练紧凑,总

      msg_id:表示可以是一个sys.messages表中定义的消息代号;

睡前习惯看看书,昨晚翻看简媜《谁在银闪闪的地方,等你》时,看到一句话,言简意赅,一语中的,没有艳丽辞藻的点缀,亦没有磅礴的气势,就简单的一句话像一根针戳中了我的心窝,突然觉得好难过,心里堵得慌,就像有东西哽在喉咙里,极难受。简媜在书里写“人生对你而言,是太重还是太轻?是甜美还是割喉的苦?是长得看不到终点,还是短得不知道怎么跟心爱的人说再见?”,看完那一刻,又被文字勒痛了心,想起了一些纠葛不清的往事。文字的作用很奇妙,它能够让乐观的你心情变差,就像是一个人,给你说伤心话语,让你不得不为之难过伤怀。这季节原本就清冷,极容易惹起文艺青年伤春悲秋的情怀,读完这句话,我瞬间觉得自己很可悲,因为无论是我读

              使用 sp_addmessage 存储在 sys.messages 目录视图中的用户定义错误消息号。

              用户定义错误消息的错误号应当大于 50000。

     msg_str:表示也可以是一个用户定义消息,该错误消息最长可以有 2047 个字符;

             (如果是常量,请使用N'xxxx',因为是nvarchar的)

              当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。

     @local_variable:表示也可以是按照 msg_str 方式的格式化字符串变量。           

第二个参数:severity

           用户定义的与该消息关联的严重级别。(这个很重要)

            任何用户都可以指定 0 到 18 之间的严重级别。

            [0,10]的闭区间内,不会跳到catch;

            如果是[11,19],则跳到catch;

            如果[20,无穷),则直接终止数据库连接;

第三个参数:state

            如果在多个位置引发相同的用户定义错误,

            则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。

         

            介于 1 至 127 之间的任意整数。(state 默认值为1)

            当state 值为 0 或大于 127 时会生成错误!

第四个参数:argument

            用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。

第五个参数:option

            错误的自定义选项,可以是下表中的任一值:

            LOG :在错误日志和应用程序日志中记录错误;

            NOWAIT:将消息立即发送给客户端;

            SETERROR:将 @@ERROR 值和 ERROR_NUMBER 值设置为 msg_id 或 50000;

[SQL]代码示例

--示例1

执行以下下面代码。这样就可以了。 declare @x intset @x = 1

DECLARE @raiseErrorCode nvarchar(50) SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY) RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)

--示例2

执行以下下面代码。这样就可以了。 declare @x intset @x = 1

RAISERROR ( N'This is message %s %d.', -- Message text, 10, -- Severity, 1, -- State, N'number', -- First argument. 5 -- Second argument. ); -- The message text returned is: This is message number 5. GO

--示例3

RAISERROR (N'<<%*.*s>>', -- Message text. 10, -- Severity, 1, -- State, 7, -- First argument used for width. 3, -- Second argument used for precision. N'abcde'); -- Third argument supplies the string. -- The message text returned is: << abc>>. GO

--示例4

执行以下下面代码。这样就可以了。 declare @x intset @x = 1

RAISERROR (N'<<%7.3s>>', -- Message text. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO

--示例5   

--A. 从 CATCH 块返回错误消息

以下代码示例显示如何在 TRY 块中使用 RAISERROR 使执行跳至关联的 CATCH 块中。

它还显示如何使用 RAISERROR 返回有关调用 CATCH 块的错误的信息。

BEGIN TRY RAISERROR ('Error raised in TRY block.', -- Message text. 16, -- Severity. 1 -- State. ); END TRY BEGIN CATCH DECLARE @ErrorMessage NVARCHAR(4000); DECLARE @ErrorSeverity INT; DECLARE @ErrorState INT; SELECT @ErrorMessage = ERROR_MESSAGE(), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE(); RAISERROR (@ErrorMessage, -- Message text. @ErrorSeverity, -- Severity. @ErrorState -- State. ); END CATCH;

--示例6

--B. 在 sys.messages 中创建即席消息

以下示例显示如何引发 sys.messages 目录视图中存储的消息。

该消息通过 sp_addmessage 系统存储过程,以消息号50005添加到 sys.messages 目录视图中。

sp_addmessage @msgnum = 50005, @severity = 10, @msgtext = N'<<%7.3s>>'; GO RAISERROR (50005, -- Message id. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO sp_dropmessage @msgnum = 50005; GO

--示例7

--C. 使用局部变量提供消息文本

以下代码示例显示如何使用局部变量为 RAISERROR 语句提供消息文本。

执行以下下面代码。这样就可以了。 declare @x intset @x = 1

sp_addmessage @msgnum = 50005, @severity = 10, @msgtext = N'<<%7.3s>>'; GO RAISERROR (50005, -- Message id. 10, -- Severity, 1, -- State, N'abcde'); -- First argument supplies the string. -- The message text returned is: << abc>>. GO sp_dropmessage @msgnum = 50005; GO

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

sql中的 raiserror什么意思啊?

RAISERROR

返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。

语法

RAISERROR ( { msg_id | msg_str } { , severity , state }

[ , argument [ ,...n ] ] )

[ WITH option [ ,...n ] ]

参数

msg_id

存储于 sysmessages 表中的用户定义的错误信息。用户定义错误信息的错误号应大于 50,000。由特殊消息产生的错误是第 50,000 号。

msg_str

是一条特殊消息,其格式与 C 语言中使用的 PRINTF 格式样式相似。此错误信息最多可包含 400 个字符。如果该信息包含的字符超过 400 个,则只能显示前 397 个并将添加一个省略号以表示该信息已被截断。所有特定消息的标准消息 ID 是 14,000。

msg_str 支持下面的格式:

% [[flag] [width] [precision] [{h | l}]] type

可在 msg_str 中使用的参数包括:

flag

用于确定用户定义的错误信息的间距和对齐的代码。

可以查阅一下SQL SERVER的联机丛书(在安装了MSSQL的开始菜单里可以查到)

sql 2005 Raiserror的用法???

1、说明:创建数据库

CREATE DATABASE database-name

2、说明:删除数据库

drop database dbname

3、说明:备份sql server

--- 创建 备份数据的 device

USE master

EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

--- 开始 备份

BACKUP DATABASE pubs TO testBack

4、说明:创建新表

create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

根据已有的表创建新表:

A:create table tab_new like tab_old (使用旧表创建新表)

B:create table tab_new as select col1,col2… from tab_old definition only

5、说明:删除新表drop table tabname

6、说明:增加一个列

Alter table tabname add column col type

注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:添加主键: Alter table tabname add primary key(col)

说明:删除主键: Alter table tabname drop primary key(col)

8、说明:创建索引:create [unique] index idxname on tabname(col….)

删除索引:drop index idxname

注:索引是不可更改的,想更改必须删除重新建。

9、说明:创建视图:create view viewname as select statement

删除视图:drop view viewname

10、说明:几个简单的基本的sql语句

选择:select * from table1 where 范围

插入:insert into table1(field1,field2) values(value1,value2)

删除:delete from table1 where 范围

更新:update table1 set field1=value1 where 范围

查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!

排序:select * from table1 order by field1,field2 [desc]

总数:select count * as totalcount from table1

求和:select sum(field1) as sumvalue from table1

平均:select avg(field1) as avgvalue from table1

最大:select max(field1) as maxvalue from table1

最小:select min(field1) as minvalue from table1

11、说明:几个高级查询运算词

A: UNION 运算符

UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

B: EXCEPT 运算符

EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

C: INTERSECT 运算符

INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。

注:使用运算词的几个查询结果行必须是一致的。

12、说明:使用外连接

A、left outer join:

左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

B:right outer join:

右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

C:full outer join:

全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

其次,大家来看一些不错的sql语句

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)

法一:select * into b from a where 1 <>1

法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)

insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)

insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件

例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)

select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间

select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)

select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )

select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明:between的用法,between*查询数据范围时包括了边界值,not between不包括

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

9、说明:in 的使用方法

select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息

delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:

select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

12、说明:日程安排提前五分钟提醒

SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

13、说明:一条sql 语句搞定数据库分页

select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录

select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)

select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据

select top 10 * from tablename order by newid()

18、说明:随机选择记录

select newid()

19、说明:删除重复记录

Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名

select name from sysobjects where type='U'

21、说明:列出表里的所有的

select name from syscolumns where id=object_id('TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。

select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type

显示结果:

type vender pcs

电脑 A 1

电脑 A 1

光盘 B 2

光盘 A 2

手机 B 3

手机 C 3

23、说明:初始化表table1

TRUNCATE TABLE table1

24、说明:选择从10到15的记录

select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

另外,虚机团上产品团购,超级便宜

sql server 怎么用消息的形式返回一个表的内容, 和raiserror类似 但是是返回一个表的内容,在线等

将表中的数据转为varchar,赋给@StringVariable

DECLARE @StringVariable NVARCHAR(500);

SET @StringVariable = N'123';

RAISERROR (@StringVariable, -- Message text.

10, -- Severity,

1); -- First argument supplies the string.

什么情况下返回表的内容,固定表?

sql中“raiserror(4008,16,10)”语句是什么意思?里面的数字是什么意思?

RAISERROR 语句2007-06-07 16:30说明

此语句用于发出错误信号和向客户端发送消息。

语法

RAISERROR error-number [ format-string ] [, arg-list ]

参数

error-number error-number 是大于 17000 的五位整数。错误号存储在全局变量 @@error 中。

format-string 如果未提供 format-string 或者其为空,则使用错误号在系统表中查找错误消息。Adaptive Server Enterprise 从 SYSMESSAGES 表中获取的消息范围为 17000-19999。在 Adaptive Server Anywhere 中,此表为空视图,因此这个范围内的错误消息应该提供格式字符串。编号为 20000 或更大的错误消息从 SYS.SYSUSERMESSAGES 表中获取。

在 Adaptive Server Anywhere 中,format-string 的长度最多可达 255 字节。

Adaptive Server Enterprise 中的 RAISERROR 语句支持的扩展值在 Adaptive Server Anywhere 中不受支持。

对于可选参数列表中的参数,格式字符串可以包含占位符。这些占位符的形式为 %nn!,其中 nn 是介于 1 到 20 之间的整数。

中间 RAISERROR 状态和代码信息在过程终止后会丢失。如果在返回时伴随 RAISERROR 发生了错误,则返回错误信息,而 RAISERROR 信息将丢失。应用程序可以通过在不同的执行点检查 @@error 全局变量,查询中间 RAISERROR 状态。

用法

RAISERROR 语句允许发出用户定义的错误并向客户端发送消息。

权限

无。

副作用

无。

另请参见

CREATE TRIGGER 语句 [T-SQL]

ON_TSQL_ERROR 选项 [compatibility]

CONTINUE_AFTER_RAISERROR 选项 [compatibility]

标准和兼容性

SQL/92 Transact-SQL 扩展。

SQL/99 Transact-SQL 扩展。

Sybase 受 Adaptive Server Enterprise 支持。

示例

下面的语句引发错误 23000(该错误在用户定义的错误范围内)并向客户端发送消息。请注意在 error-number 和 format-string 参数之间有一个逗号。逗号后的第一项被解释为参数列表中的第一项。

RAISERROR 23000 'Invalid entry for this column: %1!', @val

下一个示例使用 RAISERROR 禁止连接。

create procedure DBA.login_check()

begin

// Allow a maximum of 3 concurrent connections

if( db_property('ConnCount') > 3 ) then

raiserror 28000

'User %1! is not allowed to connect -- there are already %2! users logged on',

current user,

cast(db_property('ConnCount') as int)-1;

else

call sp_login_environment;

end if;

end

go

grant execute on DBA.login_check to PUBLIC

go

set option PUBLIC.Login_procedure='DBA.login_check'

go

参考资料:http://hi.baidu.com/trip008/blog/item/d6139ab70e9fe9f531add1b5.html

sql server raiserror()

if @a=1

begin

raiserror('值不能为1',16,1)

return 

end

这样就可以了,就是简单的抛出异常

更多追问追答追问那请问前面加%s或是%b 是什么意思追答什么意思,哪加%s或是%b追问DECLARE @raiseErrorCode nvarchar(50)

SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY)

RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)追答这个和你raiserror 没有关系啊,,,

sqlserver 中%s是表示数字类型的,如NUMBER;'%s'表示字符串类型

  • 本文相关:
  • sql server自定义异常raiserror使用示例
  • sql server 2012 安装图解教程(附sql2012下载地址)
  • sql server 2008完全卸载方法(其他版本类似)
  • mysql server has gone away 问题的解决方法
  • sql server数据库入门学习总结
  • sql server 2008 阻止保存要求重新创建表的更改问题的设置方法
  • 在与 sql server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器
  • microsoft sql server 2012 数据库安装图解教程
  • sql server 2008图文安装教程
  • sql server 2008登录错误:无法连接到(local)解决方法
  • sqlserver2005 没有日志文件(*.ldf) 只有数据文件(*.mdf) 恢复数
  • 简单有用的sql脚本 (行列互转,查询一个表内相同纪录等)
  • sql server 关于设置null的一些建议
  • sql2005express中导入access数据库的两种方法
  • sqlserver2005 的查询独占模拟
  • sysservers 中找不到服务器,请执行 sp_addlinkedserver 将该服务
  • access 导入到sql server 2005的方法小结
  • sql2005 日志清理 sql2005压缩清除日志的方法
  • powerdesigner中如何导入sql server数据库
  • 让sql2005运行在独立用户下出现 wmi 提供程序错误的解决方式
  • sql中的 raiserror什么意思啊?
  • sql 2005 Raiserror的用法???
  • sql server 怎么用消息的形式返回一个表的内容, 和raiserror类似 但是是返回一个表...
  • sql中“raiserror(4008,16,10)”语句是什么意思?里面的数字是什么意思?
  • sql server raiserror()
  • 在SQL中raiserror和rollback有什么区别?
  • SQL raiserror()提示信息里的字符串如何与变量连接
  • SQL触发器RAISERROR问题
  • sql server 2005里的函数,例如raiserror('系统限制您最低只能打九折&...
  • sql server语句中的while用法
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved