ストアド プロシージャで囲まれたカーソルの実行に問題があるわけではありません。しかし、私は同じことを達成するためのより効率的な方法を見つけたいと思っています。
ここに行きます。
ストアド プロシージャ: RawFeed.sql
(5 分ごとに実行)
Set @GetATM = Cursor For
Select DeviceCode,ReceivedOn
From RawStatusFeed
Where CRWR=2 AND Processed=0
Order By ReceivedOn Desc
Open @GetATM
Fetch Next
From @GetATM Into @ATM,@ReceivedOn
While @@FETCH_STATUS = 0
Begin
Set @RawFeed=@ATM+' '+Convert(VarChar,@ReceivedOn,121)+' '+'002307'+' '+@ATM+' : Card Reader/Writer - FAULTY '
Exec usp_pushRawDataAndProcess 1,@RawFeed
Fetch Next
From @GetATM Into @ATM,@ReceivedOn
End
Set @GetATM = Cursor For
Select DeviceCode,ReceivedOn
From RawStatusFeed
Where CRWR=0 AND Processed=0
Order By ReceivedOn Desc
Open @GetATM
Fetch Next
From @GetATM Into @ATM,@ReceivedOn
While @@FETCH_STATUS = 0
Begin
Set @RawFeed=@ATM+' '+Convert(Varchar,@ReceivedOn,121)+' '+'002222'+' '+@ATM+' : Card Reader/Writer - OK '
Exec usp_pushRawDataAndProcess 1,@RawFeed
Fetch Next
From @GetATM Into @ATM,@ReceivedOn
End
同様に、条件パラメーターと変数で囲まれた文字列SET
が異なるステートメントがさらに 10 個あります。WHERE
@RawFeed
取得した行ごとに、その特定の行で別のストアド プロシージャを実行します。
私の質問は
カーソルを使用せずに同じことを達成するより良い方法はありますか?
変数 @ストアド プロシージャへの入力となるRawFeed
次のものが含まれます。これで文字列全体が分割され、いくつかのテーブルのような操作が行われます。string
usp_pushRawDataAndProcess
INSERT,UPDATE,DELETE
1 つ以上の文字列を処理することはできませんusp_pushRawDataAndProcess
NMAAO226 2012-09-22 16:10:06.123 002073 NMAAO226 : Journal Printer - OK
WMUAO485 2012-09-22 16:10:06.123 002222 WMUAO485 : Card Reader/Writer - OK