标题: MSSQL编程:SQL Server 7.0 进门(八) [打印本页] 作者: 乐观 时间: 2015-1-16 22:25 标题: MSSQL编程:SQL Server 7.0 进门(八) 为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。server存储过程当中前往了局
从存储过程当中前往了局有三种体例:
1、前往了局集
这是客户端使用程序前往了局的最通用的办法。了局集是经由过程利用SELECT语句选择数据发生的。了局集能够从永世表、一时表或部分变量中发生。将了局前往到另外一个存储历程不是一种无效的办法。存储历程不克不及会见另外一个存储历程创建的了局集。
比方从永世表中前往了局集:
USEpubs
GO
CREATEPROCEDUREap_CreateResultFromPermtable
AS
SELECTau_inameFROMauthors
GO
比方从部分变量中创立了局集:
USEpubs
GO
CREATEPROCEDUREap_CreateResultFromVariable
AS
DECLARE@au_inamechar(20)
SELECT@au_iname=au_inameFROMauthors
WHEREau_id=‘172-32-1176’
SELECT@au_id
GO
2、设置OUTPUT参数的值
输入参数常常用来从存储过程当中检索出了局。假如某个参数在传输到存储过程当中时被界说成OUTPUT,则对该参数的任何修正在加入存储以后仍旧无效。
比方:
USEpubs
GO
CREATEPROCEDUREap_SetOutputVar@countintegerOUTPUT
AS
SELECT@count=count(*)FROMauthors
GO
从输入参数中检索出值:
USEpubs
GO
CREATEPROCEDUREap_GetOutputVar
AS
DECLARE@numinteger
EXECUTEap_SetOutputVar@numOUTPUT
PRINT“thecountis”+convert(char,@num)
GO
・将游标利用成OUTPUT参数。游标可使用OUTPUT(输入)参数,但不克不及利用成输出参数。也就是说,游标能够作为了局前往,但却不克不及传输到过程当中往。当游标被用作参数时,必要限制其为OUTPUT和VARYING。VARYING关头字指出该了局集要用来撑持输入参数。如许就供应了将了局集前往到挪用历程的才能。
比方:
USEpubs
GO
CREATEPROCEDUREGetTitleCount@count_cursorCURSORVARYINGOUTPUT
AS
SET@count_cursor=CURSOR
FOR
SELECTau_id,count(*)
FROMtitleauthors
GROUPBYau_id
OPEN@count_cursor
GO
3、经由过程RETURN参数前往形态
这是一种从存储历程前往毛病码的办法。存储历程老是前往一个形态值,用户也能够利用RETURN语句前往本人的形态。
比方:
USEpubs
GO
CREATEPROCEDUREap_SetReturnStatus
AS
DECLARE@countinteger
SELECT@count=count(*)FROMauthors
IF@count=0
RETURN(1)
ELSE
RETURN(0)
GO
比方检索出前往的形态:
USEpubs
GO
CREATEPROCEDUREap_GetReturnStatus
AS
DECLARE@statusinteger
EXECUTE@status=ap_SetReturnStatus
IF@status=1
PRINT“Norowsfound”
ELSE
PRINT“successful”
GO
在存储过程当中举行毛病处置
好像别的程序一样,在存储过程当中举行毛病处置长短常主要的。体系变动@@error在实行每个TransactSQL语句以后城市失掉一个值。关于乐成的实行,@@error的值为0,假如呈现毛病,则@@error中将包括毛病信息。@@error体系变量对存储历程的毛病处置长短常主要的。
注重:为了避免毛病,@@error所能设置的值在sysmessages表的“error”中反应了出来。
在存储过程当中的毛病有两品种型:
1、数据库相干的毛病
这些毛病是由数据库的纷歧致性引发的,体系利用非0的@@error值暗示特定的数据库成绩。在TransactSQL实行以后,能够经由过程@@error取得所呈现的毛病。假如发明@@error不为0,则必需接纳需要的举动,年夜多半情形下,存储将不再持续举行处置而前往。上面的示例展现了典范的猎取数据库毛病的办法。该历程将毛病代码安排到输入变量中,如许,挪用程序就可以够会见到。
USEpubs
GO
CREATEPROCEDUREap_TrapDatabaseError@return_codeintegerOUTPUT
AS
UPDATEauthorsSETau_iname=“Jackson”
WHEREau_iname=“Smith”
IF@@error0
BEGIN
SELECT@return_code=@@error
RETURN
END
ELSE
@return_code=0
GO
2、营业逻辑毛病
这些毛病是因为违背了营业划定规矩而引发的。要猎取这些毛病,起首必要界说营业划定规矩,基于这些划定规矩,必要在存储过程当中增添需要的毛病检测代码。人们常常利用RAISERROR语句传递这些毛病。RAISERROR供应了前往用户界说毛病及将@@error变量设置成用户界说毛病号的才能。毛病动静能够主动态地创建,大概基于毛病号从“sysmessages”表中检索到。一旦呈现了毛病,毛病就会以一种服务器毛病动静的体例前往到客户机。上面是RAISERROR命令的语法:
RAISERROR(msg_id|msg_str,severity,state
[,argument][,…n]])
[WITHoptions]
Msg_id指明用户界说动静的id,该动静存储在“sysmessages”体系表中。
Msg_str用于静态创立动静的动静字符串。这与C言语中的“printf”十分类似。
Severity界说用户赋值的毛病动静严峻水平。
State是从1到127的恣意整数值,它暗示毛病的挪用形态信息。正数的state值将缺省为1。
OPTIONS指明毛病的定制选项。OPTIONS的无效值以下:
1)LOG。
将毛病纪录到服务器毛病日记和NT事务日记中。该选项必要动静带有从19到25的严峻水平。而只要体系办理员才干收回这类动静。
2)NOWAIT。
将动静当即发送到客户端服务器。
3)SETERROR。
不论其严峻级别怎样,将@@error的值设置为msg_id或5000。