私のクエリは、私のテーブルには、347000行が私の最終的な出力を得るために時間以上を取っ.itsた現在SQL Serverは:誰もが
declare @row_id int = 2
declare @last_row_id int =(select MAX(Row_ID) from dbo.Source)
create table #source (
Row_ID float null,
[Document] [nvarchar](255) NULL,
[ITEMCode] [nvarchar](255) NULL,
[Text] [nvarchar](255) NULL)
while(@row_id<=(@last_row_id))
begin
declare @Document nvarchar(255)
declare @itemcode nvarchar(255)
select @itemcode=ITEMCode,@Document=Document from dbo.Source where [email protected]_id
if ((@itemcode='' or @itemcode is null))
select @itemcode=ITEMCode,@Document=Document from #source where [email protected]_id-1
insert into #source
select Row_ID,@Document,@itemcode,[Text]
from dbo.Source where [email protected]_id
print @row_id
set @row_id= @row_id+1
end
select * from #source
drop table #source
以下の通りですこのロジックを簡素化することができます。どのようにしてこのクエリをより速く行うことができます誰も助けることができますか?
要件:
出典:
Row_ID Document ITEMCode Text
2 10223 20235 aaaa
3 bbbb
4 cccc
5 10278 202475 xxxx
6 yyyy
7 yyy
出力は次のようになります。
Row_ID Document ITEMCode Text
2 10223 20235 aaaa
3 10223 20235 bbbb
4 10223 20235 cccc
5 10278 202475 xxxx
6 10278 202475 yyyy
7 10278 202475 yyy
#sourceに何かがある前にそれを選択しているのはなぜですか? –
何かがあるときは選択しないでください。 dbo.Sourceの最初のレコードでは、ITEMCodeは空でもなく、nullでもありません。義足は初めて実行されることはありません。ループが2回目になるとき#sourceにデータがある –
このコードの目的が何であるかを記述すると、より良い応答を得るでしょう。コードを読むのは難しいです。 –