科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道快速了解Transact-SQL游标名称的作用域

快速了解Transact-SQL游标名称的作用域

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

SQL Server 2000 支持 DECLARE CURSOR 语句上的 GLOBAL 和 LOCAL 关键字以定义游标名称的作用域。GLOBAL 指定游标名称对连接是全局性的。

作者:赛迪网 yashi 来源:天新网 2008年3月27日

关键字: Mssql SQL SQL Server 数据库

  • 评论
  • 分享微博
  • 分享邮件

使用 DECLARE 和 OPEN 局部游标的存储过程可以将游标传递出去以供要求调用的存储过程、触发器或批处理使用。这可以通过使用由新的 CURSOR VARYING 数据类型定义的 OUTPUT 参数来实现。游标变量只能用作 OUTPUT 参数。不能将它们用于输入参数。当存储过程完成时游标必须是打开的,以便将游标返回 OUTPUT 参数。也可以通过新的 CURSOR 数据类型来声明局部变量以包含对局部游标的引用。

USE pubs
GO
/* Create a procedure with a cursor output parameter. */
CREATE PROCEDURE OpenCrsr @OutCrsr CURSOR VARYING OUTPUT AS

SET @OutCrsr = CURSOR FOR
SELECT au_lname
FROM authors
WHERE au_lname LIKE 'S%'

OPEN @OutCrsr
GO

/* Allocate a cursor variable. */
DECLARE @CrsrVar CURSOR

/* Execute the procedure created earlier to fill
   the variable. */
EXEC OpenCrsr @OutCrsr = @CrsrVar OUTPUT

/* Use the variable to fetch the rows from the cursor. */
FETCH NEXT FROM @CrsrVar
WHILE (@@FETCH_STATUS <> -1)
BEGIN
   FETCH NEXT FROM @CrsrVar
END

CLOSE @CrsrVar

DEALLOCATE @CrsrVar
GO

数据库 API 不支持存储过程中的游标输出参数。不能直接从数据库 API 函数执行包含游标输出参数的存储过程。而只能从另一个存储过程、触发器、Transact-SQL 批处理或脚本执行这些存储过程。

只有在明确释放时或关闭连接时 GLOBAL 游标才可用。创建 LOCAL 游标的存储过程、触发器或批处理终止时将隐性释放 LOCAL 游标,除非游标已作为参数返回。当调用过程的代码中引用游标的参数或变量超出作用域时,将隐性地释放 LOCAL 游标。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章