Sql server 多线程中的临时表
我有一个多线程应用程序 每个线程执行存储过程,我在其中创建一个本地临时表。 临时表的名称相同:Sql server 多线程中的临时表,sql-server,multithreading,temp-tables,Sql Server,Multithreading,Temp Tables,我有一个多线程应用程序 每个线程执行存储过程,我在其中创建一个本地临时表。 临时表的名称相同:#tentable 当线程操作此#attreable 如何为具有相同名称的每个线程创建一个#可诱惑的。您需要确保每个线程都在与connection npool不同的连接中运行(因此它处于不同的会话中) 临时表仅在其自己的会话中可见 发件人: 本地临时表仅在当前会话中可见 #tentable应该只对当前SQL server会话/连接可用,因此如果希望每个进程都有一个单独的#tentable,只需为每个进程
#tentable
当线程操作此#attreable
如何为具有相同名称的每个线程创建一个
#可诱惑的。您需要确保每个线程都在与connection npool不同的连接中运行(因此它处于不同的会话中)
临时表仅在其自己的会话中可见
发件人:
本地临时表仅在当前会话中可见
#tentable应该只对当前SQL server会话/连接可用,因此如果希望每个进程都有一个单独的#tentable,只需为每个进程使用单独的连接即可。
如果不可行,您可以使用表变量,这在某种程度上是常规表和变量之间的交叉-如下所示:
DECLARE @TableVar TABLE (
IDColumn int,
NameColumn varchar(max))
INSERT INTO @TableVar (IDColumn, NameColumn)
SELECT ID, Name
FROM RealTable
WHERE .....
但是,如果希望所有进程都使用同一个表,只需将其命名为双哈希(##tentable),就可以全局访问该表。只要多个线程使用单独的连接(我真的希望他们是这样,否则多线程可能没有好处,或者代码中隐藏了大量的竞争条件),他们都应该有自己的临时表副本。你不必做任何其他事情。我想避免事务,因为我操作的数据量很大(大数据插入=>undo太长)@Patrice Pezillier-您需要为每个线程使用不同的连接。啊-您可以做很多事情,避免事务是不可能的。始终存在一个事务。您可以在每次插入或两次后提交,但原子操作仍然是sql serer的一部分。我可以为每个具有不同名称的线程创建一个临时表吗?我需要一个使用参数中临时表的名称的存储过程…可能吗?@Patrice-正在传递临时表的名称-您真的不想这样做,因为您最终不得不将动态SQL添加到听起来已经很复杂的内容中。似乎我回答了一个错误的问题:),编辑了响应以匹配