首页 > 数据库 >9.5 SQL Server游标

9.5 SQL Server游标

时间:2023-01-30 10:44:59浏览次数:47  
标签:product name list 游标 Server cursor 9.5 FETCH

SQL Server 游标(CURSOR)

目录

简介

SQL基于集合进行操作,例如,SELECT语句返回一组称为结果集的行。但是,有时可能需要逐行处理数据集。这时就需要游标了。

什么是数据库游标

数据库游标是一个可以遍历结果集的行的对象。它允许您处理查询返回的单个行。

SQL Server游标生命周期

下面是使用游标的步骤:

首先,声明一个游标。

DECLARE cursor_name CURSOR
    FOR select_statement;

要声明游标,可以在declare关键字后面用cursor数据类型指定其名称,并提供一个SELECT语句来定义游标的结果集。

接下来,通过执行 SELECT 语句打开并填充游标:

OPEN cursor_name;

然后,将游标中的一行提取到一个或多个变量中:

FETCH NEXT FROM cursor INTO variable_list;

SQL Server提供了@@FETCHSTATUS函数,该函数返回针对游标执行的最后一条游标FETCH语句的状态;如果@@FETCHSTATUS返回0,则表示FETCH语句成功。因此可以使用WHILE语句从游标中提取所有行,如以下代码所示:

WHILE @@FETCH_STATUS = 0  
    BEGIN
        FETCH NEXT FROM cursor_name;  
    END;

然后,关闭游标:

CLOSE cursor_name;

最后,释放游标:

DEALLOCATE cursor_name;

示例

有如下产品表

首先,声明两个变量来保存产品名称和标价,并声明一个游标来保存从production.products中检索产品名称和价格的查询结果:

DECLARE 
    @product_name VARCHAR(MAX), 
    @list_price   DECIMAL;

DECLARE cursor_product CURSOR
FOR SELECT 
        product_name, 
        list_price
    FROM 
        production.products;

接下来,打开游标:

OPEN cursor_product

然后,从游标中取出每一行,并打印出产品名称和标价:

FETCH NEXT FROM cursor_product INTO 
    @product_name, 
    @list_price;

WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @product_name + CAST(@list_price AS varchar);
        FETCH NEXT FROM cursor_product INTO 
            @product_name, 
            @list_price;
    END;

然后关闭游标:

CLOSE cursor_product

最后,释放游标:

DEALLOCATE cursor_product

完整代码如下:

DECLARE 
    @product_name VARCHAR(MAX), 
    @list_price   DECIMAL;

DECLARE cursor_product CURSOR
FOR SELECT 
        product_name, 
        list_price
    FROM 
        production.products;

OPEN cursor_product;

FETCH NEXT FROM cursor_product INTO 
    @product_name, 
    @list_price;

WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @product_name + CAST(@list_price AS varchar);
        FETCH NEXT FROM cursor_product INTO 
            @product_name, 
            @list_price;
    END;

CLOSE cursor_product;

DEALLOCATE cursor_product;

输出:

实际上,您很少使用游标逐行的方式处理结果集。

一般都是返回整个结果集到客户端,再由客户端处理。

标签:product,name,list,游标,Server,cursor,9.5,FETCH
From: https://www.cnblogs.com/michaelshen/p/17074768.html

相关文章

  • 9.6 SQL Server异常处理
    SQLServer异常处理目录SQLServer异常处理TRYCATCH简介CATCH块中的函数嵌套的TRYCATCH简单示例在事务中使用TRYCATCH的示例THROW简介示例A)以下示例使用THROW语句引......
  • 8.3 SQL Server非聚集索引
    SQLServerNon-ClusteredIndexes(非聚集索引)目录SQLServerNon-ClusteredIndexes(非聚集索引)简介使用SQLServerCREATE[NONCLUSTERED]INDEX创建非聚集索引示例A)使用C......
  • 8.4 SQL Server唯一索引
    SQLServer唯一索引(UniqueIndex)目录SQLServer唯一索引(UniqueIndex)简介示例A)创建包含一列的唯一约束B)创建包含多列的唯一约束SQLServer唯一索引与NULL唯一索引(Uniquei......
  • 8.5 SQL Server包含列索引
    SQLServer索引与包括的列目录SQLServer索引与包括的列简介创建包含列的索引的语法简介本文使用sales.customers表作为示例下面语句在email列创建唯一约束:CREATEU......
  • 8.6 SQL Server筛选索引
    SQLServer筛选索引目录SQLServer筛选索引简介示例筛选索引的优点简介如果使用得当,非聚集索引可以大大提高查询性能。然而,非聚集索引的好处是有代价的:存储和维护。......
  • 8.7 SQL Server计算列上的索引
    SQLServer计算列上的索引目录SQLServer计算列上的索引简介计算列索引的要求简介有如下客户表:查找居住在garry.espinoza的客户:SELECTfirst_name,last......
  • 让Windows Server 2008r2 IIS7.5 ASP.NET 支持10万并发请求
    由于之前使用的是默认配置,服务器最多只能处理5000个同时请求,今天下午由于某种情况造成同时请求超过5000,从而出现了上面的错误。为了避免这样的错误,我们根据相关文档调整了......
  • SQL Server 返回了错误 21(设备未就绪。) 解决方法
    https://www.cnblogs.com/xx_cs/archive/2013/05/31/3110881.html在文件'G:\LedDB\LedDB.mdf' 中、偏移量为0x00000001a9a000 的位置执行 读取 期间,操作系统已经向SQL......
  • Kubernetes监控手册06-监控APIServer
    写在前面如果是用的公有云托管的Kubernetes集群,控制面的组件都交由云厂商托管的,那作为客户的我们就省事了,基本不用操心APIServer的运维。个人也推荐使用云厂商这个服......
  • IdentityServer4源码解析_2_元数据接口
    1|0目录IdentityServer4源码解析_1_项目结构IdentityServer4源码解析_2_元数据接口IdentityServer4源码解析_3_认证接口IdentityServer4源码解析_4_令牌发放接口Id......