MSSQL网页编程之SQL Server 7.0 进门(八)---存储历程...
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENTserver|存储历程存储过程当中前往了局从存储过程当中前往了局有三种体例:
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]])
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。
远程历程挪用
SQLServer供应了挪用驻留在分歧服务器上的存储历程的才能。挪用如许的存储历程称呼远程存储历程挪用。为了使得挪用能从一个SQLServer转移到另外一个服务器,两个服务器应当互相界说成对方的无效远程服务器。
设置远程服务器的设置:
·扩大某个服务器的组。
·右击该服务器并点击“Properties”。
·设置选项“AllowotherSQLServerstoconnectremotelytothisSQLserverviaRPC”。
·设置“Querytimeout”选项的值,该值指定从一个查询处置前往所能守候的秒数。缺省值为0,暗示同意无穷的守候工夫。
·设置完成设置选项以后,点击“OK”。
·从头启动服务器以后,修正将会失效。
·在另外一台远程服务器上反复不异的步骤。
挪用远程存储历程必要指明服务器的称号,后带数据库的称号和具有者的称号。上面是在分歧的服务器(Server2)上挪用一个存储历程的示例。
Execserver2.pubs.dbo.myproc
豆豆的后话:
这里只是深刻的先容了SQLServer经常使用的常识,工具也是基于SQLServer数据库编写使用程序的编程职员,而非数据库办理者。但关于使用程序编程者,懂得数据库的办理也长短常有效的。倡议在今后的工夫自行往懂得数据库的办理,这关于优化程序也是相称有效的。
支持AIX、FreeBSD、HP-UX、Linux、MacOS、NovellNetware、OpenBSD、OS/2Wrap、Solaris、Windows等多种操作系统 发几份SQL课件,以飨阅者 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 无法深入到数据库系统层面去了解和探究 我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过! groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。 我们学到了什么?思考问题的时候从表的角度来思考问 可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。 可以动态传入参数,省却了动态SQL的拼写。 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
页:
[1]