前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BI-SQL丨游标

BI-SQL丨游标

原创
作者头像
PowerBI丨白茶
发布2022-08-20 08:49:52
3810
发布2022-08-20 08:49:52
举报
文章被收录于专栏:PowerBIPowerBI

游标

游标这个概念在SQL中比较重要,在其他语言中也有类似的处理办法。

那么什么是游标呢?简而言之,SQL语句返回的结果通常为数据集,而游标可以在此基础上,像一个指针一样,对某些行结果进行处理,换成PowerBI中的概念有点像迭代遍历。

适用场景

1.某些场景下,针对SELECT返回的集合,需要进行逐行读取,或者针对行数据进行某些操作。

2.在某些交互式程序中,集合不能作为有效的处理单元,这时候需要有针对的逐行或者部分进行处理。

使用步骤

1.声明游标:定义游标的名称、类型、属性。

2.打开游标:执行SQL语句,准备对游标进行操作。

3.读取游标:从结果集检索,进行逐行操作。

4.关闭游标:将游标进行关闭,可以使用Open再次打开。

5.释放游标:删除缓存并释放游标的占用资源。

声明游标语法

代码语言:txt
复制
DECLARE 游标名称 CURSOR                               --游标命名
[ LOCAL | GLOBAL ]                                   --游标的作用域
[ FORWORD_ONLY | SCROLL ]                            --游标的移动方向
[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]         --游标的类型
[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]            --游标的访问类型
[ TYPE_WARNING]                                      --类型转换警告语句
FOR SELECT 语句                                      --SELECT查询语句
[ FOR { READ ONLY | UPDATE [OF 列名称]}][,...n]      --可修改的列

使用实例

案例数据:

在白茶本机的数据库中存在名为“CaseData”的数据库。"Dim_Product"产品表。

例子1:

声明名为test1的游标,使test1与产品表进行关联。

代码语言:txt
复制
DECLARE test1 CURSOR SCROLL 
FOR SELECT * FROM Dim_Product
DECLARE @test1 CURSOR
SET @test1=test1

结果如下:

注意:这里白茶在声明test1的时候,使用了SCROLL,如果不进行此表明的话,则只能进行NEXT提取操作,表明了则可以进行FIRAT、LAST、PRIOR、NEXT等所有的操作。

例子2:

打开游标,并查看当前游标数据行数。

代码语言:txt
复制
OPEN test1
SELECT '游标数据行数' =@@CURSOR_ROWS        --全局变量,查看数据行数

结果如下:

对比原始数据,可以发现符合我们预期。

例子3:

读取游标。

代码语言:txt
复制
FETCH NEXT FROM test1
SELECT '执行情况'=@@FETCH_STATUS  --全局变量,查看读取情况

结果如下:

注:

@@FETCH_STATUS返回值共有以下三种,代表了三种状态。

建议每次执行的时候,添加此步骤,方便进行排错。

FETCH_STATUS返回值

描述

0

FETCH命令执行成功

1

FETCH命令执行失败或数据超过游标数据结果集范围

2

所读取数据不存在

例子4:

关闭并释放游标。

代码语言:txt
复制
CLOSE test1
DEALLOCATE test1

结果如下:

游标被关闭进行删除操作。

注意事项:

游标属于高级应用的一种,但是内存资源耗用较多;

能不使用游标就不用;

数据量过大的时候,尽量不用游标;

游标使用过后,切记关闭删除操作。

其他补充:游标除了上面展示的,还可以对特定数据进行修改操作,也可以与存储过程和WHILE搭配使用,后面有机会的话,白茶会进行补充。

这里是白茶,一个PowerBI的初学者。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档