仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1014|回复: 9
打印 上一主题 下一主题

[学习教程] MSSQL网页编程之SQL Server 7.0 进门(八)---存储历程...

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:37:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对于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]])
[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。

远程历程挪用
   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等多种操作系统
简单生活 该用户已被删除
沙发
发表于 2015-1-19 19:04:48 | 只看该作者
发几份SQL课件,以飨阅者
爱飞 该用户已被删除
板凳
发表于 2015-1-19 19:04:48 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
若天明 该用户已被删除
地板
发表于 2015-1-28 09:42:04 | 只看该作者
无法深入到数据库系统层面去了解和探究
海妖 该用户已被删除
5#
发表于 2015-2-5 18:16:50 | 只看该作者
我是一个ERP初学者,对于前台运用基本熟悉,但对于后台SQLServer的运用一点也不懂,特想学习下相关资料。至少懂得一些基本的运用。希望各位能给于建议,小弟再谢过!
精灵巫婆 该用户已被删除
6#
发表于 2015-2-13 05:48:11 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
深爱那片海 该用户已被删除
7#
发表于 2015-3-3 15:29:24 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
不帅 该用户已被删除
8#
发表于 2015-3-11 11:38:56 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-18 09:17:19 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-25 16:24:15 | 只看该作者
如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-17 10:55

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表