Sql server 处理多个用户同时创建临时表
我有一个报告将在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
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为您避免名称冲突的方法。它实际创建的表的名称与临时表的名称相似,但末尾有一个序号,以避免名称冲突。它会自动为您处理此问题。否,以您显示的方式创建的临时表是特定于会话的。多个用户不会相互干扰。如果临时表以#开头,则它特定于该用户。如果你一开始给它一个#####,那么它对所有用户来说都是全球性的。谢谢,伙计们!这些都是自学的陷阱,但我一直在学习!我担心如果您正在使用连接池,可能会导致一些问题,但似乎已经考虑过了:可能会重复