Временная таблица уникальна для нескольких запросов в одном пуле соединений? - PullRequest
2 голосов
/ 19 октября 2011

У меня есть следующий сохраненный процесс, который использует временную таблицу для массового импорта данных. Я понимаю, что временные таблицы уникальны для каждого сеанса, однако мне интересно, если мое приложение использует потоки и делает несколько параллельных запросов к хранимому процессу, используя одно и то же соединение 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 ]

3 голосов
/ 19 октября 2011

В то время как один поток использует соединение и выполняет эту хранимую процедуру, это же соединение не может быть повторно использовано пулом соединений - поэтому здесь нет опасности его совместного использования. Другие потоки не могут использовать это соединение и вместо этого будут открывать новые.

Кроме того, нет необходимости удалять временную таблицу до завершения хранимой процедуры - временные таблицы, созданные в хранимой процедуре, автоматически удаляются при выходе из процедуры.

0 голосов
/ 19 октября 2011

Я думаю, что если ваше приложение выполняет параллельные вызовы этой хранимой процедуры, это будут отдельные соединения, и в этом случае они будут отдельными временными таблицами.

Лучший способ выяснить это - проверить. Сделайте так, чтобы ваше приложение совершало параллельные звонки и удерживало эти соединения. Затем выполните sp_who, чтобы увидеть, много ли соединений для вашего приложения, и просмотреть выходные данные этих временных таблиц (учитывая, что они содержат разные данные).

...