0

私のシナリオは少し異なります。ストアドプロシージャで行っていることは

一時テーブルを作成し、「カーソル」を使用して行を挿入します

Create Table #_tempRawFeed
    (
    Code            Int Identity,
    RawFeed         VarChar(Max)
    )

カーソルを使用して一時テーブルにデータを挿入します

 Set @GetATM = Cursor Local Forward_Only Static For
    Select DeviceCode,ReceivedOn
    From RawStatusFeed
    Where C1BL=1 AND Processed=0
    Order By ReceivedOn Desc
Open @GetATM
Fetch Next
From @GetATM Into @ATM_ID,@Received_On
While @@FETCH_STATUS = 0
    Begin
        Set @Raw_Feed=@ATM_ID+' '+Convert(VarChar,@Received_On,121)+' '+'002333'+' '+@ATM_ID+' : Bills - Cassette Type 1 - LOW '
        Insert Into #_tempRawFeed(RawFeed) Values(@Raw_Feed)
        Fetch Next
        From @GetATM Into @ATM_ID,@Received_On
    End

次に、別のカーソルを使用して一時テーブルの各行を処理する必要があります

DECLARE @RawFeed    VarChar(Max)

DECLARE Push_Data CURSOR FORWARD_ONLY LOCAL STATIC
FOR SELECT RawFeed
FROM #_tempRawFeed

OPEN Push_Data
FETCH NEXT FROM Push_Data INTO @RawFeed

WHILE @@FETCH_STATUS = 0
BEGIN
    /* 
    What Should i write here to retrieve each row one at a time ??
    One Row should get stored in Variable..in next iteration previous value should get deleted.
    */
    FETCH NEXT FROM Push_Data INTO @RawFeed 
END
CLOSE Push_Data
DEALLOCATE Push_Data

Drop Table #_tempRawFeed    

各行を一度に1つずつ取得するには、BEGINに何を書き込む必要がありますか?1つの行がVariableに格納されます。次の反復では、前の値が削除されます。

4

1 に答える 1

0

最後の質問に関して、最後のカーソル内で実際に実行しようとしているのがRawFeed列の値を1つの変数に連結することである場合、カーソルはまったく必要ありません。以下を使用できます(SQL Fiddleコードから採用)。

CREATE TABLE #_tempRawFeed
(
   Code            Int IDENTITY
   RawFeed         VarChar(MAX)
)

INSERT INTO #_tempRawFeed(RawFeed) VALUES('SAGAR')
INSERT INTO #_tempRawFeed(RawFeed) VALUES('Nikhil')
INSERT INTO #_tempRawFeed(RawFeed) VALUES('Deepali')

DECLARE @RawFeed    VarChar(MAX)

SELECT @RawFeed = COALESCE(@RawFeed + ', ', '') + ISNULL(RawFeed, '') 
FROM #_tempRawFeed

SELECT @RawFeed

DROP TABLE #_tempRawFeed

さまざまな行の値を単一の文字列に連結する方法の詳細:多くの行を単一のテキスト文字列に連結しますか?

最初のカーソルも使用しないようにできると確信しています。パフォーマンスが大幅に低下するため、カーソルの使用は避けてください。セットベースの操作を使用しても、同じ結果を得ることができます。

于 2012-09-29T10:10:28.063 に答える