是否需要在 SQL Server 中删除或解除分配临时表



我写了一些声明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;

table variable的范围在特定批次中。因此,您不必显式执行任何操作来drop/deallocate表变量占用的空间。

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

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

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

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

第四,您将多行放入没有统计信息的@table变量中。

  • 不要这样做 - 改用 #temp 表,并使用 SQL:BatchComplete 的探查器并查看读取、写入、CPU 和持续时间,查看在其上放置索引是净收益还是净损失!

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

第五,一般来说,完成后将 #temp 放下是一种很好的做法。 您无需为@table变量而烦恼。

最新更新