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

Pri*_*esh 3 t-sql memory sql-server heap stack

在T-SQL中,当我们做类似的事情

declare @PolicyId int = 20
Run Code Online (Sandbox Code Playgroud)

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

Rem*_*anu 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;
Run Code Online (Sandbox Code Playgroud)

注意如何在@x循环内部声明可以在循环外引用.IE浏览器.循环并没有创建一个范围.但是初始赋值确实在循环的每次迭代中执行(打印的值总是1,不是1,2,3...).