如果我
,则在存储过程中DECLARE @tmpClientTable TABLE
我需要再次放弃吗?或者它会在下次存储的proc运行时被覆盖。
如果其他人也运行了存储过程会发生什么......那会是一个单独的表吗?
答案 0 :(得分:4)
您不需要(实际上也不能)明确删除它。
自动处理表变量的创建和删除。
在存储过程中,可以缓存表变量,而不是重复删除和创建表变量。有关详情,请参阅Temporary Table Caching Explained。
并发用户将获得单独的执行上下文和表变量的单独实例。
答案 1 :(得分:2)
这是一个表变量。它不能/不需要丢弃。
它在存储过程中具有本地范围,这意味着运行相同PROC
的任何并发连接将彼此隔离。
答案 2 :(得分: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
答案 3 :(得分: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表。