我是否需要在SQL Server中删除或取消分配临时表?

时间:2016-02-06 16:03:17

标签: sql-server tsql

我编写了一些声明TABLE和CURSOR的脚本。在脚本结束时,我释放了CURSOR。我还应该解除分配表吗?

DECLARE @MyTable TABLE (columns);
INSERT @MyTable(columns) VALUES (values)
INSERT @MyTable(columns) VALUES (values)
...

DECLARE workorders SCROLL CURSOR FOR
SELECT (rest of statement);

... work...

CLOSE workorders;
DEALLOCATE workorders;

2 个答案:

答案 0 :(得分:3)

table variable范围与特定批次一起使用。因此,您不必明确对drop/deallocate表变量占用的空间做任何事情。

table variable占用的空间将在创建它的批处理结束时自动删除

答案 1 :(得分:1)

首先,你可以避开光标吗?如果是这样,请以基于集合的方式重写代码(一次操作多行,而不是一次一行)。

其次,如果你不能,你可以使用LOCAL FAST_FORWARD游标吗?

第三,你是对的 - 你肯定需要释放光标。

第四,您将多行放入@table变量doesn't have statistics

  • 不要这样做 - 改为使用#temp表,并通过使用Profiler for SQL查看是否在其上放置索引是净收益还是净损失:BatchCompleted,并查看Reads ,写入,CPU和持续时间!

    • 除非您将@table变量作为参数传递,否则在帖子中,您不是

第五,一般来说,在完成这些表后放弃#temp表是一种很好的做法。你不需要为@table变量而烦恼。