我试图将存储过程的结果放入光标中,在当前过程中使用。 我已经添加了我的代码,但我不确定是否可能或者我的语法是否正确?
DECLARE cursorIDList CURSOR FOR
EXEC spGetUserIDs
OPEN cursorIDList
FETCH NEXT FROM cursorIDList INTO @ID
我收到以下错误信息:在“EXEC”附近出现语法错误。期望“SELECT”,“(”或“WITH”。
提前致谢。
我试图将存储过程的结果放入光标中,在当前过程中使用。 我已经添加了我的代码,但我不确定是否可能或者我的语法是否正确?
DECLARE cursorIDList CURSOR FOR
EXEC spGetUserIDs
OPEN cursorIDList
FETCH NEXT FROM cursorIDList INTO @ID
我收到以下错误信息:在“EXEC”附近出现语法错误。期望“SELECT”,“(”或“WITH”。
提前致谢。
DECLARE @t TABLE (ID INT)
INSERT INTO @t
EXEC spGetUserIDs
DECLARE cursorIDList CURSOR FOR
SELECT * FROM @t
OPEN cursorIDList
FETCH NEXT FROM cursorIDList INTO @ID
在我看来,一个非常有趣的方法是将游标作为参数使用(尽管如果您不打算更新表,我认为这不是更好的选择):
create Table dbo.MyTable
(
i int
);
Insert Into dbo.MyTable (i) values (1)
Insert Into dbo.MyTable (i) values (2)
Insert Into dbo.MyTable (i) values (3)
Insert Into dbo.MyTable (i) values (4)
Go
Set NoCount ON;
Go
Create Proc dbo.myProc
(
@someValue int,
@cur Cursor Varying Output
)
As
Begin
declare @x int;
Set @cur = Cursor for
Select i From dbo.MyTable
Where i < @someValue;
open @cur
End
Go
-- Use of proc
declare @cur cursor;
declare @x int;
Exec dbo.myProc 3, @cur output
fetch next from @cur into @x
while @@fetch_status = 0
begin
print 'value: ' + cast(@x as varchar)
fetch next from @cur into @x
end
close @cur;
Deallocate @cur;
Go
--Cleanup
Drop Proc dbo.myProc
Drop Table dbo.MyTable
SQL-Server 中游标的语法如下:
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement
在 FOR
之后,你必须写一个 SELECT
。
更多信息请参见: https://msdn.microsoft.com/it-it/library/ms180169.aspx