定义可更新游标的示例

CREATE TABLE #(id int,a int)
INSERT #  SELECT 1,1
UNION ALL SELECT 2,2
UNION ALL SELECT 3,2

--索引或者约束
--ALTER TABLE # ADD UNIQUE(id)               --惟一键(约束),提供RID书签
--CREATE INDEX IDX_a ON #(a)                  --a列上的普通索引,可以提供RID书签
--CREATE CLUSTERED INDEX IDX_id_1 ON #(id)  --id列上的聚集索引,可以提供群集键书签
--CREATE INDEX IDX_id_2 ON #(id)              --id列上的普通索引,游标的定义语句无法使用该索引提
                                                       供的RID书签
--CREATE INDEX IDX_a_id ON #(a,id)           --a列和id列的上普通索引,可以提供RID书签

--游标处理
DECLARE tb CURSOR LOCAL
FOR
SELECT id FROM # ORDER BY a
DECLARE @id int
OPEN tb
FETCH tb INTO @id
WHILE @@FETCH_STATUS>=0
BEGIN
    UPDATE # SET a=a-@id/2
    WHERE CURRENT OF tb
    FETCH tb INTO @id
END
CLOSE tb
DEALLOCATE tb
SELECT * FROM #
DROP TABLE #
posted @ 2012-06-05 19:25  ChaunceyHao  阅读(200)  评论(0)    收藏  举报