ストアド プロシージャのループごとにテーブル変数から行を 1 つずつ削除しようとしていますが、ループし続けてレコードを削除できない場合があります。値を PRINT しようとしても、レコードはそこにあります。私の削除ステートメントが実行されたときに、エラーは発生しません。
ループが終了しない原因となっているテーブル変数の削除が遅れているインスタンスはありますか?
これが私のコードです:
--DECLARATIONS
declare @temp_table table
(
rid int identity(1,1),
Account_Code varchar(255),
PRIMARY KEY (rid)
)
declare @row_count int = 0
declare @current_id int
-----------------------------
delete from @temp_table
insert into @temp_table
select distinct a.Account_Code from MyTable a
set @row_count =(select COUNT(*) from @temp_table)
print 'TABLE ROWS COUNT:'+ cast(@row_count as varchar(100))
while(@row_count <> 0)
begin
set @current_id = (select top 1 rid from @temp_table)
print 'Current ID in Process:'+cast(@current_id as varchar(100))
/*
Some Processes Here.....
*/
delete from @temp_table where rid = @current_id
set @row_count =(select COUNT(*) from @temp_table)
print 'TABLE ROWS COUNT:'+ cast(@row_count as varchar(max))
end
これは、The Values を印刷して得たものです。
TABLE ROWS COUNT:21
Current ID in Process: 10403
TABLE ROWS COUNT:20
Current ID in Process: 10404
TABLE ROWS COUNT:19
Current ID in Process: 10405
TABLE ROWS COUNT:18
Current ID in Process: 10406
Current ID in Process: 10406
Current ID in Process: 10406
Current ID in Process: 10406
Current ID in Process: 10406
その後、スクリプトは 10406 でループします。
注: スクリプトのこの部分の前に、@temp_table を他のプロセスに既に使用しているため、rid 値が 10400 以上になりました。