前两天一个同事大叔问了这样一个问题,他要对表做个类似foreach的效果,问我怎么搞,我想了想,就拿游标回答他,当时其实也没用过数据库中的游标,但是以前用过ADO里面的,感觉应该差不多。
今天闲下来,百度下,做了个关于游标的小DEMO:
首先,让我们先来建张测试表:
USE LoadTest2010
CREATE TABLE testCursor /*创建测试表*/
(
id INT,
name VARCHAR(50)
)
--插入测试数据
INSERT INTO testCursor VALUES(1,'lhc')
INSERT INTO testCursor VALUES(2,'jay')
接着,我们使用游标对这张表进行一个循环的操作:
--首先定义临时存储数据的变量,以供游标移动时当作Temp用
DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE cursorTest CURSOR FOR --定义游标
SELECT * FROM testCursor --定义使用游标的表
OPEN cursorTest --打开游标
FETCH NEXT FROM cursorTest INTO @id,@name --将游标向下移动一行,获取的数据放入之前定义的变量中
WHILE @@FETCH_STATUS=0 --判断是否成功获取数据
BEGIN
UPDATE testCursor SET name=name+'1'
WHERE id=@id --这里进行相应的处理,可以根据需要填入SQL语句
FETCH NEXT FROM cursorTest INTO @id,@name --将游标向下移动一行
END
--关闭游标
CLOSE cursorTest
DEALLOCATE cursorTest
完成之后,执行一下:
发现我们想要的循环效果出现了。。。。嘿嘿~~~