如果我在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
我haved預計只看到
someValue
ID5_ASDF
看來,表變量@tempTable保持在光標迭代之間的範圍 - 但那麼如何在每次迭代中重新聲明變量呢?對我沒有意義。這也備份我的假設它仍然在保護範圍 -
我在每次迭代中解決它通過
delete @tempTable
。
任何人都可以解釋這種行爲嗎?
謝謝 - 但是如何在每次迭代中再次聲明變量?公主, – zmaster