为T-SQL变量分配的内存在哪里?

时间:2012-05-16 13:40:04

标签: sql-server tsql memory stack heap

在T-SQL中,当我们执行类似

的操作时
declare @PolicyId int = 20

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

1 个答案:

答案 0 :(得分:6)

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...)。