2014-02-12 115 views
4

下降临时表在一个存储过程,如果我需要在存储过程

DECLARE @tmpClientTable TABLE 

我会需要再次降了吗?或者它会在下次存储proc运行时被覆盖。

如果其他人也运行存储的proc,会发生什么情况......会不会是一个单独的表?

谢谢,

+1

http://dba.stackexchange.com/questions/16385/whats-the-difference-between-a-temp-table-and-table-variable-in-sql-server –

回答

4

你不需要(并且实际上不能)明确地删除它。

创建和删除表变量会自动处理。

在存储过程中,表变量可以缓存而不是重复被删除和创建。有关更多信息,请参阅Temporary Table Caching Explained

并发用户将得到一个单独的执行上下文和单独的表变量实例。

2

这是一个表变量。它不能/不需要被丢弃。

它在存储过程中具有本地范围,这意味着运行相同的PROC的任何并发连接将彼此隔离。

0

这是#TEMP表语法的(一个版本)。

IF OBJECT_ID('tempdb..#TempCustomer') IS NOT NULL 
begin 
     drop table #TempCustomer 
end 


CREATE TABLE #TempCustomer 
( 
    [CustomerID] nchar(5) 
, [CompanyName] nvarchar(40) 
) 


IF OBJECT_ID('tempdb..#TempCustomer') IS NOT NULL 
begin 
     drop table #TempCustomer 
end 

您不能删除@variable表。

2

表变量在执行后立即下降。

例如:

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL 
); 

INSERT INTO @Table VALUES('John', 'Neveda') 

SELECT * FROM @Table 
go  

执行以上后,尝试这种在同一个会话:

DECLARE @Table TABLE( 
name varchar(30) NOT NULL, 
location varchar(30) NOT NULL , 
locationB varchar(30) NOT NULL 
); 

INSERT INTO @Table VALUES('John', 'Neveda', 'LasVegas') 

SELECT * FROM @Table 

凡为临时表,直到会话关闭后不会被删除。 LocalTempTables Vs GlobalTempTables

+2

这种方法只适用,如果你正在单独的块中运行上述查询。如果你一次运行它,你会得到一个错误,因为表已经存在。 – datagod

+1

@datagod - 好点!如果您在执行此操作后执行此操作,请在同一个会话中尝试使用“GO”,您可以一次全部运行 – liebs19