我是这个存储过程的新手,我的问题与游标输出参数有关。游标输出参数和普通存储过程(仅是变量)之间的区别是什么,或者会影响查询的结果或性能?
我正在使用SQL Server2014。创建存储过程我使用了快捷键alt + k,alt + x。在选择存储过程之后,在我已选择存储过程的列表中,它要求选择存储过程类型:
我不明白第二个存储过程的类型。我试图用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数据类型”,我看不到其他输出吗?
答案 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且不涉及系统操作的操作,例如创建文件或发送电子邮件。甚至在那种情况下,对调用者隐藏结果集还是很晦涩。