Hogan Asked: 2013-10-29 11:16:18 +0800 CST2013-10-29 11:16:18 +0800 CST 2013-10-29 11:16:18 +0800 CST 删除临时表的好处 772 在 SQL Server 中删除临时表有什么好处(如果有)? 例如: DROP TABLE #temp; 由于服务器会自动删除临时表,因此该语句似乎不起作用。 sql-server 4 个回答 Voted Aaron Bertrand 2013-10-29T11:28:19+08:002013-10-29T11:28:19+08:00 我通常只是出于习惯而明确删除#temp 表(我喜欢清理我创建的任何东西)。有一种说法是,显式删除 #temp 表会阻止 #temp 表缓存和重用,但事实并非如此:有关更多详细信息,请参阅@PaulWhite 的这篇博文,这篇博文了解更多。 Best Answer Martin Smith 2013-10-29T13:45:16+08:002013-10-29T13:45:16+08:00 #temp在子范围(过程、触发器、EXEC-ed SQL)中创建的表会在范围结束时自动删除。 但是只有在会话结束@@NESTLEVEL时才会自动删除 0 的值。这些挂在多批次。 因此,对于此类临时查询,必须删除它们(特别是如果它们可能运行多次或稍后的批处理将创建一个相同名称)。 将以下内容粘贴到 SSMS 中的新查询窗口中 CREATE TABLE #T (X INT PRIMARY KEY) INSERT INTO #T VALUES (1) 将在第二次运行时失败 消息 2714,第 16 级,状态 6,第 2 行 数据库中已经有一个名为“#T”的对象。 Hannah Vernon 2013-10-29T11:25:01+08:002013-10-29T11:25:01+08:00 您明确告诉服务器删除对#temp表的引用。例如,如果#temp表正在使用大量资源,则tempdb执行DROP TABLE #temp可能会在会话结束之前减少资源消耗。 您可能希望删除该表以确保在其数据失效后不会错误地使用它。 Hogan 2013-10-29T11:17:07+08:002013-10-29T11:17:07+08:00 除非您计划稍后在会话中使用相同的临时表名称,否则没有理由在查询或存储过程中执行此操作。但是,在这种情况下,可以根据新功能使用新名称。
我通常只是出于习惯而明确删除#temp 表(我喜欢清理我创建的任何东西)。有一种说法是,显式删除 #temp 表会阻止 #temp 表缓存和重用,但事实并非如此:有关更多详细信息,请参阅@PaulWhite 的这篇博文,这篇博文了解更多。
#temp
在子范围(过程、触发器、EXEC
-ed SQL)中创建的表会在范围结束时自动删除。但是只有在会话结束
@@NESTLEVEL
时才会自动删除 0 的值。这些挂在多批次。因此,对于此类临时查询,必须删除它们(特别是如果它们可能运行多次或稍后的批处理将创建一个相同名称)。
将以下内容粘贴到 SSMS 中的新查询窗口中
将在第二次运行时失败
您明确告诉服务器删除对
#temp
表的引用。例如,如果#temp
表正在使用大量资源,则tempdb
执行DROP TABLE #temp
可能会在会话结束之前减少资源消耗。您可能希望删除该表以确保在其数据失效后不会错误地使用它。
除非您计划稍后在会话中使用相同的临时表名称,否则没有理由在查询或存储过程中执行此操作。但是,在这种情况下,可以根据新功能使用新名称。