临时表在同一连接池上的多个请求中是唯一的?

时间:2011-10-19 18:31:46

标签: sql sql-server sql-server-2005 sql-server-2008

我有以下存储过程,它使用临时表批量导入数据。我理解临时表对于每个会话都是唯一的,但是我想知道我的应用程序是否使用线程并对存储过程发出多个并发请求,使用来自应用程序池的相同sql连接,它们最终会引用相同的临时表?

CREATE PROCEDURE [dbo].[Mytestproc]
AS
  BEGIN
      BEGIN TRANSACTION

      CREATE TABLE #Hold
        (
           ID INT,
           VAL NVARCHAR(255)
        )

      BULK INSERT #Hold
        FROM 'C:\data.txt'
        WITH
          (
            FieldTermInAtOr ='|',
            RowTermInAtOr ='\n'
          )

      SELECT *
      FROM   #Hold

      DROP TABLE #Hold

      COMMIT TRANSACTION
  END 

2 个答案:

答案 0 :(得分:3)

虽然一个线程正在使用连接并执行此存储过程,但连接池不能重用该连接 - 因此不存在共享的危险。其他线程无法使用此连接,而是打开新连接。

此外,在存储过程结束之前不需要删除临时表 - 退出过程时会自动删除在存储过程中创建的临时表。

答案 1 :(得分:0)

我认为如果你的应用程序正在对这个存储过程进行并发调用,那么它将是单独的连接,在这种情况下它们将是单独的临时表。

最好的方法是测试它。让您的应用程序进行并发呼叫,并保持这些连接。然后执行sp_who以查看应用程序的连接是否是多个,并查看这些临时表的输出(假设它们包含不同的数据)。