【发布时间】:2010-12-15 14:50:20
【问题描述】:
我有一个多线程应用程序。
每个线程都执行我在其中创建本地临时表的存储过程。
临时表名称相同:#TempTable
当他们操纵这个#TempTable时,我在线程之间发生了冲突
如何为每个同名的线程创建一个#TempTable?
【问题讨论】:
标签: sql-server multithreading temp-tables
我有一个多线程应用程序。
每个线程都执行我在其中创建本地临时表的存储过程。
临时表名称相同:#TempTable
当他们操纵这个#TempTable时,我在线程之间发生了冲突
如何为每个同名的线程创建一个#TempTable?
【问题讨论】:
标签: sql-server multithreading temp-tables
【讨论】:
只要多个线程使用单独的连接(我真的希望它们是这样,否则多线程可能没有任何好处,或者您的代码中隐藏着大量竞争条件),它们都应该有自己的副本临时表。你不应该做任何其他事情。
【讨论】:
#TempTable temporary table 应该只对当前 SQL 服务器会话/连接可用,因此如果您希望每个进程都有一个单独的 #TempTable,只需为每个进程使用单独的连接。 如果这不可行,您可以使用表变量,这在某种程度上是常规表和变量之间的交叉 - 像这样:
DECLARE @TableVar TABLE (
IDColumn int,
NameColumn varchar(max))
INSERT INTO @TableVar (IDColumn, NameColumn)
SELECT ID, Name
FROM RealTable
WHERE .....
但是,如果您希望所有进程都使用同一张表,只需使用双哈希 (##TempTable) 命名它,然后它就可以全局访问。
【讨论】: