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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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_Multithreading_Temp Tables - Fatal编程技术网

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添加到听起来已经很复杂的内容中。似乎我回答了一个错误的问题:),编辑了响应以匹配