存储过程临时表导致超时错误

时间:2012-12-18 17:27:51

标签: sql stored-procedures

我在存储过程中有一个临时表,它会导致查询超时,因为它正在进行复杂的计算。我想在它使用后丢弃它。它被创建为

DECLARE @SecondTable TABLE

现在我不能使用

删除它
drop @SecondTable

实际上我必须使用

drop #SecondTable

有人知道为什么吗?

1 个答案:

答案 0 :(得分:3)

我绝不是一个SQL大师,但为什么下降甚至是必要的?

如果它是一个表变量,一旦存储过程退出就不再存在。

我真的很惊讶DROP #SecondTable不会对你造成错误;既然你在那里放了一张临时桌子;不是表变量。

修改

因此,根据您的评论,我的更新如下:

1。)如果您正在使用表变量(@SecondTable);那么就不需要掉线了。 SQL Server将为您解决此问题。

2。)听起来你的超时是由使用表的计算引起的,而不是表本身的丢弃。在这种情况下;我可能建议使用临时表而不是表变量;因为临时表将允许您添加索引等以提高性能;虽然表变量不会。如果这还不够;您可能需要增加查询的超时持续时间。

3.)在SQL中;表变量(@SecondTable)和临时表(#SecondTable)是两个完全不同的东西。我将参考Table VariablesTemporary Tables

的MSDN文档