2017-12-20 24 views
0

SQL Serverを使用しています。準備中(@@行数> 0)

私はこの

while(@@rowcount>0) 
begin 
--do stuff 
end 

のようなコードの部分を持っている事は、私が最初の反復が実行されますを確認しますきちんと整頓何かを作りたいです。あなたは何を前に置くことを提案しますか?現在、私は

select 'Calling this to initialize @@rowcount to 1' 

を使用していますが、何か良いことがある場合は、私が知りたいことがあります。変数を追加する

+1

はXYの問題のような音受け入れ答えよりも短くなっているが、おそらくあなたのクエリを整理するためのより良い方法があります使用することができます。 – DavidG

+0

ここでの最善のアプローチは、ループの代わりにセットベースを使用することです。 –

+0

nvarcharのすべての非数値シーケンスを特定のシンボルに置き換えるために、頭痛を起こしているpatindexを使用しています。私は反復ごとに1つのパターンを行いますが、これを行うにはセットベースの方法があるとは思えません。それは非常に複雑ではありません。私はポストを作るだろうが、私は否定的な評判にうんざりしている;) –

答えて

2

あなたは、別途初期条件を処理することを可能にし、いくつかのステップがありものをやっ@@RowCount場合の値を保持します:

declare @RowCount as Int = 42; 
-- Initialize @RowCount to skip the loop entirely, if appropriate. 

while @RowCount > 0 
    begin 
    -- Do stuff; 
    set @RowCount = @@RowCount; 
    -- Perhaps do more stuff that might affect @@RowCount . 
    end; 

また、変数は、最初に処理するために使用することができますループを通過する:

declare @FirstPass as Bit = 1; 
-- Initialize @FirstPass to skip the loop entirely, if appropriate. 
-- Note that the loop will always be entered once if @@RowCount has not been cleared. 

while @@RowCount > 0 or @FirstPass = 1 
    begin 
    set @FirstPass = 0; 
    -- Do stuff; 
    end; 

私の好みは、それが、明らか単純であり、Uであり得る@@RowCountのキャプチャされた値を提供するように、第1の方法を使用することですどのステートメントが値を変更するか心配することなく、ロギング、デバッグなどのためにsedを実行します。

1

古いGOTO

startloop: 
    -- do stuff 
IF @@rowcount > 0 GOTO startloop 
+0

これはとても良いです!私は非常に1つの答えだけを投票することができますごめんなさい申し訳ありません。 –

0

これは

select 1 
while(@@rowcount>0) 
begin 
--do stuff 
end 
+0

これはQAが質問をするときに使用した解決策でした –

+0

@ t-clausen.dkこれはOPによって使用される正確な解決法であると確信していますか?私は彼らが静的な選択を使用できることを知らなかったと思う。 – Paparazzi

+0

かなり確か: 'これを呼び出して@@行数を1に初期化する'を選択してください –

関連する問題