3

在 T-SQL 中,当我们执行类似的操作时

declare @PolicyId int = 20

分配了 4 个字节,因为 an 的大小int是 4 个字节,但是这个内存分配在哪里- 它是在堆栈上还是在堆上?

4

1 回答 1

7

T-SQL 变量既不在堆栈上,也不在堆上。它们在当前执行上下文中被命名为逻辑实体。将声明放在循环内与将其放在循环外相同。通过将变量放在循环中,您不会导致内存耗尽或堆栈溢出。请参阅以下代码:

declare @i int =0
while @i<2
begin
    declare @x int = 0;
    set @x += 1
    print @x;
    set @i += 1;
end

print @x;

请注意如何在@x循环外引用,即使在循环内声明也是如此。IE。循环没有创建范围。但是初始赋值确实会在循环的每次迭代中执行(打印的值始终是1,而不是1,2,3...)。

于 2012-05-16T14:45:28.070 回答