我正在执行以下脚本。
declare @id int = 0
while(@id < 10)
begin
declare @tbl as table (id int)
insert into @tbl values(@id)
set @id = @id + 1
SELECT * FROM @tbl
end
我得到的结果如下。
但是这个脚本每次只能在临时表中给出一行,因为临时表每次都在while循环中声明,而我只在表中插入一个值。
我不明白临时表的这种行为,请建议。
答案 0 :(得分:2)
变量的范围是可以引用变量的Transact-SQL语句的范围。变量的范围从声明它的位置开始持续到声明它的批处理或存储过程的结束。
每个DECLARE
只是&#34;读&#34;一旦:
DECLARE
语句。 DECLARE
的位置使用它们,直到脚本结束。如果我们查看你的脚本,当执行第1行时,@ tbl已在内存中保留,但只有在脚本到达第5行时才能使用该变量。但是,在每次迭代时都不会一次又一次地保留它。循环。