【发布时间】:2012-05-16 13:40:04
【问题描述】:
在 T-SQL 中,当我们执行类似的操作时
declare @PolicyId int = 20
分配了 4 个字节,因为 int 的大小是 4 个字节,但是 分配此内存的位置 - 是在堆栈上还是在堆上?
【问题讨论】:
-
而你需要知道的原因是……?
-
我正在审查一个存储过程,在一个 while 循环中声明了一个变量,我想知道这会引起什么,垃圾收集(堆)或堆栈溢出。
-
也许您应该更担心消除循环,而不是弄清楚当它弄脏床时会发生什么确切类型的异常。
-
它可能取决于声明的上下文,例如在存储过程或循环中,以及数据类型,例如
INT而不是TABLE。 -
@Pritesh 我不相信。几乎 T-SQL 中的每个循环都可以更改为没有循环的基于集合的操作。有时最好将其留在循环中,但这很少见(运行总计是一种情况,在 SQL Server 2012 之前,游标的性能优于纯粹的基于集合的解决方案)。如果您担心您的循环会炸毁您的服务器,那么可能值得考虑,而不是举起手来相信循环是必要的。
标签: sql-server tsql memory heap-memory stack-memory