12

現在のプロシージャ内で使用するために、ストアド プロシージャの結果をカーソルに入れようとしています。以下にコードを追加しましたが、これが可能かどうか、または構文が正しいかどうかわかりません。

DECLARE cursorIDList CURSOR FOR
    EXEC spGetUserIDs
OPEN cursorIDList

FETCH NEXT FROM cursorIDList INTO @ID

次のエラーが表示されます: 「EXEC」付近の構文が正しくありません。SELECT、'('、または WITH が必要です。

前もって感謝します。

4

3 に答える 3

12

次のように実行できます。

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
于 2012-07-05T10:49:25.223 に答える
0

私の意見では、非常に興味深いアプローチは、カーソルをパラメーターとして使用することです(ただし、テーブルを更新しない場合は、より良い選択だとは思いません):

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
于 2012-07-05T12:41:00.737 に答える
0

SQL-Server でのカーソルの構文は次のとおりです。

DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR FOR select_statement   

FORあなたが書く必要があります後にSELECT

詳細については、 https ://msdn.microsoft.com/it-it/library/ms180169.aspx を参照してください。

于 2016-12-14T11:59:18.617 に答える