在 T-SQL 中,当我们执行类似的操作时
declare @PolicyId int = 20
分配了 4 个字节,因为 an 的大小int
是 4 个字节,但是这个内存分配在哪里- 它是在堆栈上还是在堆上?
在 T-SQL 中,当我们执行类似的操作时
declare @PolicyId int = 20
分配了 4 个字节,因为 an 的大小int
是 4 个字节,但是这个内存分配在哪里- 它是在堆栈上还是在堆上?
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...
)。