gpt4 book ai didi

sql - SQL游标中表变量的范围

转载 作者:行者123 更新时间:2023-12-04 18:11:47 26 4
gpt4 key购买 nike

如果我在MS SQL 2008 R2中运行以下命令,则会得到意外的结果。

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

我只期望看到
someValue
ID5_ASDF

表变量@tempTable似乎在游标迭代之间保持作用域-但是如何在每次迭代中重新声明该变量呢?对我来说毫无意义。

我解决了
delete @tempTable

在每次迭代中-这也支持了我关于它仍在范围内的假设。

任何人都可以解释这种行为吗?

最佳答案

是的,它确实可以-范围不是由begin/end语句定义的,而是由存储过程或go的末尾定义的

The scope of a variable is the range of Transact-SQL statements that can reference the variable. The scope of a variable lasts from the point it is declared until the end of the batch or stored procedure in which it is declared.



http://msdn.microsoft.com/en-us/library/ms187953(v=sql.105).aspx

关于sql - SQL游标中表变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12348339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com