处理多个用户同时创建临时表

时间:2016-03-01 14:26:38

标签: sql-server

我有一个报告会触发SQL Server上的存储过程。该报告需要几分钟才能运行。目前,在开发环境中,我正在使用这种类型的代码写入几个临时表:

SELECT *
INTO #Temp1
FROM MyTable
WHERE MyVal = 'X'

SELECT *
INTO #Temp2
FROM MyOtherTable
WHERE MyOtherVal = 'Y'

ETC...

在开发环境中正常工作,但有一个轻微的可能性,有一天两个人可能会同时用两个不同的参数启动它。如果他们这样做,会导致一个#Temp被覆盖吗?如果是这样,最好的办法是什么?您可以根据时间戳或其他内容创建#Temp文件名吗?

1 个答案:

答案 0 :(得分:1)

我第一次使用临时表时,我想知道同样的事情。在SQL Server中尝试此实验。在SSMS中,运行每个查询并观察结果:

USE tempdb
GO

select * from sys.tables

SELECT * INTO #tablelist
FROM sys.tables

SELECT * INTO #tablelist2 
FROM sys.tables

-- The results of these two are different
SELECT * FROM #tablelist
SELECT * FROM #tablelist2

查看第二个查询中的表列表。您会注意到两个名为#tablelist_______ ... ____00007#tablelist______ ... ____00008的表 这就是SQL Server为您避免名称冲突的方式。它实际创建的表的名称与临时表名相似,但在末尾有一个序列号,以避免名称冲突。它会自动为您处理。