当我们创建存储过程时,通常会创建一些变量,例如:
DECLARE @UserCount INT
我们在存储过程中使用了该变量。但是我们没有在存储过程的结尾处对该变量进行处理。我们使用DEALLOCATE释放游标,但我们没有为创建的变量编写任何代码行。
另一种情况是我们创建表并将它们命名为"@table"。
SQL Server何时以及如何处理这种类型的变量?
当我们创建存储过程时,通常会创建一些变量,例如:
DECLARE @UserCount INT
http://msdn.microsoft.com/en-us/library/ms187953.aspx
顺便提一下,您可能会看到临时表(#MyTable)和表变量(@MyTable)之间的性能差异非常有趣。如果我们在分析存储过程时发现表变量的使用存在性能问题,我们会尝试改用临时表来查看是否可以提高性能。
补充一下Bob上面的回答,特别是关于这个点
We dispose Cursors with DEALLOCATE but we don't write ant lines for variables
MSDN 表示并且我引用:
游标变量不必明确释放。当变量超出作用域时,它将自动释放。
这适用于至少 SQL Server 2000。