Являются ли переменные таблицы безопасными для потоков на SQL Server 2008 R2? - PullRequest
4 голосов
/ 26 августа 2011

Например, я собираюсь использовать следующую табличную переменную внутри одной из моих хранимых процедур:

DECLARE @MyTempTable TABLE 
(
   someField int,
   someFieldMore nvarchar(50)
)

Безопасна ли эта переменная поток?если несколько запросов приходят одновременно, как вы думаете, возникнет ли конфликт?

Ответы [ 2 ]

10 голосов
/ 26 августа 2011

Да.

«Потокобезопасный» будет «безопасным для области» или «безопасным для соединения» в SQL Server.Безопасность области также подразумевает безопасность подключения.

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

. Наилучшим примером этого является различие между

  • SCOPE_IDENTITY = scope safe
  • @@ IDENTITY = соединение безопасное, небезопасное *
  • IDENT_CURRENT = небезопасно в любом случае

См .: @@ IDENTITY против SCOPE_IDENTITY () против IDENT_CURRENT [sql server 2005]

3 голосов
/ 26 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...