3
在T-SQL,當我們這樣做分配給T-SQL變量的內存在哪裏?
declare @PolicyId int = 20
4個字節分配,由於int
的大小爲4個字節,但其中是這樣分配的內存 - 是它的堆棧或上堆?
在T-SQL,當我們這樣做分配給T-SQL變量的內存在哪裏?
declare @PolicyId int = 20
4個字節分配,由於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...
)。
我認爲你的意思是1,2,2,但它+1仍然使得重點 – Paparazzi
你需要知道的原因是......? –
我正在修復一個存儲過程,在一個while循環內聲明一個變量值,我想知道這會引發什麼,垃圾回收(堆)或堆棧溢出。 – Pritesh
也許你應該更多地考慮消除循環,而不是找出當它蜷縮牀時會發生什麼樣的異常。 –