萌萌妈妈 发表于 2015-1-16 14:07:10

sql server数据库中raiserror函数的用法

为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。sqlserver数据库中raiserror的感化就和asp.net中的thrownewException一样,用于抛出一个非常或毛病。这个毛病能够被程序捕获到。

raiserror的经常使用格局以下:
raiserror(毛病的形貌,毛病的严峻级别代码,毛病的标识,毛病的形貌中的参数的值(这个能够是多个),一些别的参数),在官方上的格局形貌以下:
RAISERROR({msg_id|msg_str|@local_variable}
{,severity,state}
[,argument[,...n]])
]

个中,[,argument[,...n]]与两项是能够不写的。

分离注释一下各参数的用法:
1、{msg_id|msg_str|@local_variable}
从这个参数中能够看出,这一项大概为三个值,
1,sys.messages中的自界说毛病信息的毛病信息号,自界说毛病信息可使用sp_addmessage存储历程增加到sys.messages中,注重,用户界说毛病动静的毛病号应该年夜于50000。
示例:raiserror(50001,16,1)
2,一条间接的毛病形貌,示例:raiserror(这里是毛病形貌的示例,16,1)
3,一个包括毛病形貌变量,示例:
declare@error_mesvarchar(1000)
set@error_mes=这里是毛病形貌的示例
raiserror(@error_mes,16,1)

2、severity
这个参数为用户界说的该毛病信息的级别,我们能够指定0到18之间的严峻级别。只要sysadmin流动服务器脚色成员或具有ALTERTRACE权限的用户才干指定19到25之间的严峻级别。若要利用19到25之间的严峻级别,必需选择WITHLOG选项。

注重,假如毛病级别在20~25之间,那末数据库会以为这个毛病是致命,那末数据库会将该毛病纪录到毛病日记和使用程序日记后停止数据库的毗连。任何小于0的严峻级别被以为即是0。年夜于25的严峻级别被以为即是25。

3、state
这个参数是能够是1~127之间恣意整数,能够用来标识毛病的产生地位,假如一段代码的多个地位城市产生一样的毛病,那末就能够将这个参数设置为分歧的值,用来标识是谁人位
置产生毛病了。

4、[,argument[,...n]]
假如参数{msg_id|msg_str|@local_variable}中包括了一些取代符,那末这个参数就是取代符的详细的值,这个和asp.net中的string.Format用法是一样的。示比方下:
declare@error_mesvarchar(1000)
set@error_mes=这里是用户%s激发的毛病形貌
raiserror(@error_mes,16,1,张三)

也能够是如许,大概合用性更广些。
declare@error_mesvarchar(1000)
declare@error_objvarchar(1000)
select@error_obj=namefromtable_userswhere……
set@error_mes=这里是用户%s激发的毛病形貌
raiserror(@error_mes,16,1,@error_obj)

下面代码中的%s,代表它要替换是一个字符串,假如我们把示例写成上面如许就会报错了:
declare@error_mesvarchar(1000)
set@error_mes=这里是用户%s激发的毛病形貌
raiserror(@error_mes,16,1,1)

由于1不是一个字符串,假如要替换是一个整数,就必要利用%i大概%d了。一切的对应干系以下:
1,%d或%i代表有标记整数
2,%u代表无标记整数
3,%o代表无标记八进制数
4,%s代表字符串
5,%x或%X代表无标记十六进制数

5、]
该参数为毛病的自界说选项,能够是上面三个值中的一个:
1,LOG--在MicrosoftSQLServer数据库引擎实例的毛病日记和使用程序日记中纪录毛病。纪录到毛病日记的毛病今朝被限制为最多440字节。只要sysadmin流动服务器脚色
成员或具有ALTERTRACE权限的用户才干指定WITHLOG。
2,NOWAIT--将动静当即发送给客户端。
3,SETERROR--将@@ERROR值和ERROR_NUMBER值设置为msg_id或50000,不必思索严峻级别。

我们还能够在Begincatch中利用raiserror。示比方下:
begintry
raiserror(这是一个毛病,16,1)//注重,只要severity级别在11~19之间,把持才会跳转到catch块中。
endtry
begincatch
declare@error_messagevarchar(1000)
set@error_message=error_message()
raiserror(@error_message,16,1)
return
endcatch
InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定

透明 发表于 2015-1-18 12:00:06

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

萌萌妈妈 发表于 2015-1-25 19:07:54

如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

深爱那片海 发表于 2015-2-3 19:45:11

如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。

飘飘悠悠 发表于 2015-2-9 05:11:38

始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。

乐观 发表于 2015-2-27 02:02:28

一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。

不帅 发表于 2015-3-8 20:08:28

是要和操作系统进行Socket通讯的场景。否则建议慎重!

小女巫 发表于 2015-3-16 16:05:54

在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。

因胸联盟 发表于 2015-3-23 00:04:20

索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
页: [1]
查看完整版本: sql server数据库中raiserror函数的用法