蒙在股里 发表于 2015-1-16 22:23:27

MSSQL网页编程之SQL 游标

有了数据以后,我们就要想一个比较统一的方法来闪回。上面我们说了对于DML操作,可以通过反向执行所有逆操作来实现,对于语句里面的DDL,只能直接跳过。原因是一个DDL不一定有直接的逆操作。游标游标的范例:
1、静态游标(不检测数据行的变更)
2、静态游标(反应一切数据行的改动)
3、仅向前游标(不撑持转动)
4、键集游标(能反应修正,但不克不及正确反应拔出、删除)游标利用按次:
1、界说游标
2、翻开游标
3、利用游标
4、封闭游标
5、开释游标
Transact-SQL:
declare游标名cursor
forselet语句]
注:LOCAL部分游标GLOBAL全局游标
FORWARD_ONLY仅向前SCROLL转动
STATIC静态KEYSET键集DYNAMIC静态
READ_ONLY只读SCROLL_LOCKS锁定游标以后行

猎取游标的数据
FETCH[[NEXT|PRIOR|FIRST|LAST|
ABSOLUTE{n|@nvar|RELATIVE{n|@nvar}]
From]游标名
注:
NEXT下一行PRIOR上一行FIRST第一行
LAST最初一行ABSOLUTEn第n行
RELATIVEn以后地位入手下手的第n行
into变量把以后行的各字段值赋值给变量
游标形态变量:
@@fetch_status游标形态
0乐成-1失利-2丧失
@@cursor_rows游标中了局会合的行数
n行数-1游标是静态的0空集游标
操纵游标确当前行:
currentof游标名
以下例子,在SQLSERVER2000测试乐成
usepubs
go

declare@auidchar(12),@aulnamevarchar(20),@aufnamevarchar(20),@stchar(2),@auinfovarchar(50)
declareauth_curcursorfor
selectau_id,au_lname,au_fname,state
fromauthors

openauth_cur


fetchnextfromauth_curinto@auid,@aulname,@aufname,@st
while(@@fetch_status=0)
begin
print作者编号:+@auid
print作者姓名:+@aulname+,+@aufname
print地点州:+@st
print--------------------------
fetchnextfromauth_curinto@auid,@aulname,@aufname,@st
end


closeauth_cur
deallocateauth_cur既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。

变相怪杰 发表于 2015-1-19 10:09:06

如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。

山那边是海 发表于 2015-1-27 06:25:08

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

老尸 发表于 2015-2-5 03:51:55

习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。

小妖女 发表于 2015-2-11 03:55:27

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

第二个灵魂 发表于 2015-3-1 21:01:23

这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?

若天明 发表于 2015-3-10 23:54:49

可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。

飘飘悠悠 发表于 2015-3-17 16:11:56

所以你总能得到相应的升级版本,来满足你的需求。

谁可相欹 发表于 2015-3-24 12:22:20

这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。我做过试验,在我的实验环境中会比映射到表中提高30%左右的效率。
页: [1]
查看完整版本: MSSQL网页编程之SQL 游标