|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。sqlserver数据库中raiserror的感化就和asp.net中的thrownewException一样,用于抛出一个非常或毛病。这个毛病能够被程序捕获到。
raiserror的经常使用格局以下:
raiserror(毛病的形貌,毛病的严峻级别代码,毛病的标识,毛病的形貌中的参数的值(这个能够是多个),一些别的参数),在官方上的格局形貌以下:
RAISERROR({msg_id|msg_str|@local_variable}
{,severity,state}
[,argument[,...n]])
[WITHoption[,...n]]
个中,[,argument[,...n]]与[WITHoption[,...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、[WITHoption[,...n]]
该参数为毛病的自界说选项,能够是上面三个值中的一个:
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事务,支持行级锁定 |
|