多线程中的临时表

时间:2010-12-15 14:50:20

标签: sql-server multithreading temp-tables

我有一个多线程应用程序。

每个线程执行存储过程,我在其中创建本地临时表。 临时表的名称相同:#TempTable

线程在操作此#TempTable

时有冲突

如何为每个具有相同名称的线程制作#TempTable

3 个答案:

答案 0 :(得分:1)

您需要确保每个线程在与连接池不同的连接中运行(因此它位于不同的会话中)。

临时表仅在他们自己的会话中可见。

来自MSDN

  

本地临时表仅在当前会话中可见

答案 1 :(得分:1)

只要多个线程使用单独的连接(我真的希望它们是这样,否则可能没有多线程的好处,或者你的代码中隐藏着大量的竞争条件),它们都应该有自己的副本临时表。你不应该做任何其他事情。

答案 2 :(得分:-1)

#TempTable temporary table应仅可用于当前的SQL Server会话/连接,因此如果您希望每个进程都有一个单独的#TempTable,则只需为每个进程使用单独的连接。 如果这不可行,你可以使用表变量,它们在常规表和变量之间有点交叉 - 就像这样:

DECLARE @TableVar TABLE (
  IDColumn int,
  NameColumn varchar(max))

INSERT INTO @TableVar (IDColumn, NameColumn)
SELECT  ID, Name
FROM    RealTable
WHERE   .....

但是,如果您希望所有进程都使用同一个表,只需使用双哈希(## TempTable)命名,然后全局访问它。