私がMS SQL 2008 R2で以下を実行すると、予期しない結果が発生します。最後の反復のSQLカーソル内のテーブル変数の範囲
create table #DataTable (someID varchar(5))
insert into #DataTable
values ('ID1'),('ID2'),('ID3'),('ID4'),('ID5')
declare @data varchar(8);
declare myCursor cursor for
select someID from #DataTable
open myCursor
FETCH NEXT FROM myCursor INTO
@data
WHILE(@@Fetch_Status >=0)
BEGIN
declare @tempTable table (someValue varchar(10))
insert into @tempTable select @data + '_ASDF'
select * from @tempTable
FETCH NEXT FROM myCursor INTO
@data
END
close myCursor
deallocate myCursor
drop table #DataTable
結果:
someValue
ID1_ASDF
ID2_ASDF
ID3_ASDF
ID4_ASDF
ID5_ASDF
私は唯一のテーブル変数@tempTableはカーソル反復間の範囲に保たれているようです
someValue
ID5_ASDF
が見込まhaved - しかし、どのように各繰り返しで変数を再宣言することが可能ですか?私には分かりません。
私は、各反復で
delete @tempTable
ことによってそれを解決 - も、それはまだスコープ内にあることについての私の仮定をバックアップします。
誰でもこの動作を説明できますか?
おかげさまでしたが、どのように各繰り返しで変数を再度宣言することが可能ですか? – zmaster