Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 处理多个用户同时创建临时表_Sql Server - Fatal编程技术网

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

Sql server 处理多个用户同时创建临时表,sql-server,Sql Server,我有一个报告将在SQL Server上启动一个存储过程。报告运行需要几分钟。目前,在开发环境中,我正在使用以下类型的代码编写两个临时表: SELECT * INTO #Temp1 FROM MyTable WHERE MyVal = 'X' SELECT * INTO #Temp2 FROM MyOtherTable WHERE MyOtherVal = 'Y' ETC... 在开发环境中可以很好地工作,但是有一天两个人可能会使用两个不同的参数同时启动此功能。如果这样做,是否会导致一个#T

我有一个报告将在SQL Server上启动一个存储过程。报告运行需要几分钟。目前,在开发环境中,我正在使用以下类型的代码编写两个临时表:

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

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

ETC...

在开发环境中可以很好地工作,但是有一天两个人可能会使用两个不同的参数同时启动此功能。如果这样做,是否会导致一个
#Temp
被覆盖?如果是这样,最好的处理方法是什么?你能根据时间戳或其他东西创建一个
#Temp
文件名吗?

我第一次使用Temp表时,我也在想同样的事情。在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 uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu的表____00007
表格列表____00008


这就是SQL server为您避免名称冲突的方法。它实际创建的表的名称与临时表的名称相似,但末尾有一个序号,以避免名称冲突。它会自动为您处理此问题。

否,以您显示的方式创建的临时表是特定于会话的。多个用户不会相互干扰。如果临时表以#开头,则它特定于该用户。如果你一开始给它一个#####,那么它对所有用户来说都是全球性的。谢谢,伙计们!这些都是自学的陷阱,但我一直在学习!我担心如果您正在使用连接池,可能会导致一些问题,但似乎已经考虑过了:可能会重复