仓酷云

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

[学习教程] MSSQL教程之Transact-SQL中游标名的感化域

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:52 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
对于insert操作,只需要把event_type改成DELETE_ROWS_EVENT;对于delete操作,改成WRITE_ROWS_EVENT游标
MicrosoftSQLServer2000撑持关头字GLOBAL和LOCAL用于DECLARECURSOR语句中游标名感化域的界说。GLOBAL指定游标名在一个毗连中是全局的。LOCAL指定游标名在存储历程,触发器,包括DECLARECURSOR的批处置语句中是部分的。
MicrosoftSQLServer7.0版本之前,在一个毗连中,游标名都是全局的。你必需先实行一个用于创立游标的存储历程,然后再实行别的一个从该游标中读取纪录的存储历程。如:
USEpubs
GO
CREATEPROCEDUREOpenCrsrAS

DECLARESampleCrsrCURSORFOR
SELECTau_lname
FROMauthors
WHEREau_lnameLIKES%

OPENSampleCrsr
GO

CREATEPROCEDUREReadCrsrAS
FETCHNEXTFROMSampleCrsr
WHILE(@@FETCH_STATUS-1)
BEGIN
FETCHNEXTFROMSampleCrsr
END
GO

EXECOpenCrsr/*声明并翻开游标SampleCrsr.*/
GO
EXECReadCrsr/*从游标SampleCrsr中读取纪录.*/
GO
CLOSESampleCrsr
GO
DEALLOCATESampleCrsr
GO

部分游标在存储历程和触发器中对游标起侧重要的回护感化。全局游标能在界说它们的存储历程或触发器外被会见。因而,它们大概在不经意的时分,在存储历程和触发器外被改动。部分游标显得更平安,由于它们不会在存储历程和触发器外被改动,除非专程的经由过程输入游标参数被传送给挪用者。
由于全局游标能够在存储历程和触发器之外被援用,以是它们大概对其他语句有不成预期的影响。比方:一个存储历程创立一个全局游标xyz,历程运转停止后游标xyz仍旧处于翻开形态,假如程序其他部分又想声明一个全局游标并定名为xyz,这时候,就会产生一个反复界说的毛病。
全局和部分游标具有分歧的定名空间,以是,在统一工夫能够呈现两个具有一样名字的全局和部分游标。Transact-SQL语法撑持游标参数,一样也撑持利用GLOBAL标识游标的感化域。假如一个游标名同时暗示全局游标和部分游标,在没有指定为GLOBAL时,此游标名将援用部分游标。
数据库选项defaulttolocalcursor把持由未指定GLOBAL和LOCAL选项的DECLARECURSOR语句创立的游标的默许感化域。假如defaulttolocalcursor选项为真,则为部分游标,反之为全局。SQLServer2000中,defaulttolocalcursors选项默许为false,用于坚持与先前版本分歧。
声明而且翻开部分游标的存储历程,能够将这些游标传出给挪用它的存储历程,触发器和批处置语句。这能够经由过程一个界说为输入参数的CURSORVARYING数据范例完成。当存储历程实行停止时,游标必需翻开,用以经由过程输入参数前往。我们能够用一个界说为CURSOR范例的部分变量援用它。
USEpubs
GO
/*Createaprocedurewithacursoroutputparameter.*/
CREATEPROCEDUREOpenCrsr@OutCrsrCURSORVARYINGOUTPUTAS

SET@OutCrsr=CURSORFOR
SELECTau_lname
FROMauthors
WHEREau_lnameLIKES%

OPEN@OutCrsr
GO

/*声明部分游标.*/
DECLARE@CrsrVarCURSOR

/*将先前的游标赋给部分变量.*/
EXECOpenCrsr@OutCrsr=@CrsrVarOUTPUT

/*使用@CrsrVar往读取纪录.*/
FETCHNEXTFROM@CrsrVar
WHILE(@@FETCH_STATUS-1)
BEGIN
FETCHNEXTFROM@CrsrVar
END

CLOSE@CrsrVar

DEALLOCATE@CrsrVar
GO
数据库API其实不撑持输入游标参数的存储历程。一个包括输入游标参数的存储历程不克不及间接被数据库API实行。这些存储历程之能够被其他的存储历程,触发器,Transact-SQL批处置,剧本挪用实行。
全局游标在没有被显式开释或毗连封闭前一向无效。部分游标默许将在存储历程,触发器,批处置停止时开释,除非它被作为输入参数输入。谁人部分游标也将在援用它的存储工程停止时被开释。
你看出了作者的深度?深处半米!当初是冲那么多的大牛给他写序才买的,后来才发现无啥内容,作者也只是才用几年的新手,百花了几十两银子,再次感叹当今社会的虚伪与浮躁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-9 12:45

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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