SQL Server 2014:使用游标输出参数创建过程

时间:2019-02-08 10:12:50

标签: sql-server database stored-procedures database-cursor

我是这个存储过程的新手,我的问题与游标输出参数有关。游标输出参数和普通存储过程(仅是变量)之间的区别是什么,或者会影响查询的结果或性能?

我正在使用SQL Server2014。创建存储过程我使用了快捷键alt + k,alt + x。在选择存储过程之后,在我已选择存储过程的列表中,它要求选择存储过程类型:

  1. 创建过程基本模板
  2. 使用光标输出参数创建过程
  3. 使用输出参数创建过程。

我不明白第二个存储过程的类型。我试图用Google搜索,但没有得到足够的信息。任何帮助我理解的人将不胜感激。我已经附加了第二个存储过程类型示例脚本

CREATE PROCEDURE dbo.Sample_Procedure 
    @sample_procedure_cursor CURSOR VARYING OUTPUT
AS
    SET @sample_procedure_cursor = CURSOR FOR
        select 1
    OPEN @sample_procedure_cursor 
RETURN 0 

我只是想了解使用“光标变化输出”关键字而不是使用“ @variable数据类型”,我看不到其他输出吗?

2 个答案:

答案 0 :(得分:0)

Deepak,请参阅reference

上的文档样本

如果您在SQL代码中重复使用相同的游标,则可以将游标的定义包装到SP中一次,以后再引用它。

我在示例代码下方复制

首先创建过程

CREATE PROCEDURE dbo.uspCurrencyCursor   
    @CurrencyCursor CURSOR VARYING OUTPUT  
AS  
    SET NOCOUNT ON;  
    SET @CurrencyCursor = CURSOR  
    FORWARD_ONLY STATIC FOR  
      SELECT CurrencyCode, Name  
      FROM Sales.Currency;  
    OPEN @CurrencyCursor;  
GO

然后按如下所示使用它

DECLARE @MyCursor CURSOR;  
EXEC dbo.uspCurrencyCursor @CurrencyCursor = @MyCursor OUTPUT;  
WHILE (@@FETCH_STATUS = 0)  
BEGIN;  
     FETCH NEXT FROM @MyCursor;  
END;  
CLOSE @MyCursor;  
DEALLOCATE @MyCursor;  
GO

答案 1 :(得分:0)

作为输出的游标旨在封装游标的定义。这意味着您可以执行SP来检索已初始化的游标,该游标已链接到调用者未知的结果集,但调用者将使用它。

这带来了一个潜在的问题,即调用方将需要知道将哪些变量放入获取行中,如果操作不正确,可能会破坏游标的使用。例如,如果SP返回带有SELECT的结果集或插入到外部创建的临时表中,则不会发生这种情况。

我认为,对此几乎没有有用的应用。首先,在极少数情况下,您完全想要使用光标 ,并且它们通常具有不涉及DML且不涉及系统操作的操作,例如创建文件或发送电子邮件。甚至在那种情况下,对调用者隐藏结果集还是很晦涩。