SQL里要做循环比较麻烦,有时候需要用游标(CURSOR)。我是SQL大菜鸟,昨天刚开荒成功了一个游标。发出来备用。

基本语法形式是这样的:

DECLARE @临时变量 UNIQUEIDENTIFIER
DECLARE 游标名称 CURSOR  
FOR
    -- SELECT的结果
OPEN 游标名称
FETCH NEXT FROM 游标名称 INTO @临时变量
WHILE @@FETCH_STATUS = 0
BEGIN
    -- 对每一条记录的操作
    FETCH NEXT FROM 游标名称 INTO @临时变量
END
CLOSE 游标名称
DEALLOCATE 游标名称

举个例子,遍历我博客的分类表,输出每一项的Route名称:

DECLARE @tempId UNIQUEIDENTIFIER
DECLARE @tempName NVARCHAR(150)
DECLARE @tempDisplayName NVARCHAR(250)
DECLARE C1 CURSOR  
FOR
    SELECT c.Id,
           c.Name,
           c.DisplayName
    FROM   Category c

OPEN C1
FETCH NEXT FROM C1 INTO @tempId, @tempName, @tempDisplayName
WHILE @@FETCH_STATUS = 0
BEGIN
    SELECT @tempName
    FETCH NEXT FROM C1 INTO @tempId, @tempName, @tempDisplayName
END
CLOSE C1
DEALLOCATE C1