2012-05-16 32 views
3

在T-SQL,當我們這樣做分配給T-SQL變量的內存在哪裏?

declare @PolicyId int = 20 

4個字節分配,由於int的大小爲4個字節,但其中是這樣分配的內存 - 是它的堆棧或上堆?

+1

你需要知道的原因是......? –

+0

我正在修復一個存儲過程,在一個while循環內聲明一個變量值,我想知道這會引發什麼,垃圾回收(堆)或堆棧溢出。 – Pritesh

+3

也許你應該更多地考慮消除循環,而不是找出當它蜷縮牀時會發生什麼樣的異常。 –

回答

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

+0

我認爲你的意思是1,2,2,但它+1仍然使得重點 – Paparazzi