Files
chill_notes/数据库/SQLServer/SQL SERVER 游标使用.md
2026-04-21 20:39:08 +08:00

72 lines
2.5 KiB
Markdown
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
我们在处理数据的时候经常会出现需要循环处理数据的需求如果我们能用CTE或者其他语句处理的话没有问题但有时候往往处理起来比较困难这时候我们可以选择使用游标处理选择使用哪种形式要考虑效率问题一般游标效率不高但也有适合使用的场景。
       游标分为静态游标和动态游标静态游标的数据是固定的不会因为数据表的改变而改变动态游标的数据是随着数据表变化而变化的游标默认是动态游标通过关键字STATIC设置OK上测试数据
--测试数据
```sql
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([id] int,[name] nvarchar(22))
Insert #T
select 1,N'张三' union all
select 2,N'李四' union all
select 3,N'王五' union all
select 4,N'赵六'
Go
```
--测试数据结束
       我们先看静态游标的使用方法:
```sql
DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
DECLARE cur CURSOR STATIC --声明静态游标
```
FOR
```sql
SELECT * FROM #T
OPEN cur --打开游标
FETCH NEXT FROM cur INTO @id, @name --取数据
WHILE ( @@fetch_status = 0 ) --判断是否还有数据
```
BEGIN
```sql
SELECT '数据: ' + RTRIM(@id) + @name
UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
```
END
CLOSE cur --关闭游标
DEALLOCATE cur
       结果如下我们可以看到ID是4的数据没有改变依然是赵六而不是UPDATE之后的测试
       我们再来看一下动态游标去掉STATIC关键字即可
```sql
DECLARE @id INT , @name NVARCHAR(50) --声明变量,需要读取的数据
DECLARE cur CURSOR --去掉STATIC关键字即可
```
FOR
```sql
SELECT * FROM #T
OPEN cur --打开游标
FETCH NEXT FROM cur INTO @id, @name --取数据
WHILE ( @@fetch_status = 0 ) --判断是否还有数据
```
BEGIN
```sql
SELECT '数据: ' + RTRIM(@id) + @name
UPDATE #T SET name='测试' WHERE id=4 --测试静态动态用
FETCH NEXT FROM cur INTO @id, @name --这里一定要写取下一条数据
```
END
CLOSE cur --关闭游标
DEALLOCATE cur
       我们看结果可以看到ID为4的数据已经更改为测试
       以上是游标的用法,以及动态、静态游标的介绍使用。
---------------------
作者:二月十六
来源CSDN
原文https://blog.csdn.net/sinat_28984567/article/details/79811887
版权声明:本文为博主原创文章,转载请附上博文链接!