# SqlServer 游标循环处理数据
在开发中,经常会遇到一个场景。需要批量处理数据,循环添加、删除、修改一些数据。
需求:
有 文章表(dbo.Gas_Article)、文章作者表(dbo.Gas_ArticleAuthor)
现在需要在后台统计出每个作者共发布了多少文章,和所有文章阅读量之和的数据
以下是我的处理方案:
编写PROCEDURE,内部利用游标循环处理数据,然后使用SqlServer代理,新建一个作业定时任务处理,这样就可以在后台实时统计了。
CREATE PROCEDURE Job_UpdateAuthor --创建PROCEDURE AS BEGIN DECLARE UpdateAuthorCursor CURSOR --定义游标 FOR SELECT COUNT(*) AS ArticleNumber , SUM(ShowHits) AS ArticleHits , Author FROM dbo.Gas_Article WHERE Author IN ( SELECT Name FROM dbo.Gas_ArticleAuthor WHERE IsDelete = 0 ) GROUP BY Author --查出需要的数据至游标中 OPEN UpdateAuthorCursor --打开游标 DECLARE @Number INT, @Hits INT, @Author NVARCHAR(255) FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取第一行数据,赋值给变量 WHILE @@FETCH_STATUS = 0 BEGIN UPDATE dbo.Gas_ArticleAuthor SET ArticleNumber = @Number , ArticleHits = @Hits WHERE Name = @Author -- 更新dbo.Gas_ArticleAuthor数据 FETCH NEXT FROM UpdateAuthorCursor INTO @Number, @Hits, @Author --读取下一行数据 END CLOSE UpdateAuthorCursor --关闭游标 DEALLOCATE UpdateAuthorCursor --释放游标 END GO
复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34