У меня есть вопрос, касающийся части документации по временным таблицам, которую я недавно прочитал в TechNet . Четвертый абзац раздела « Временные таблицы » на этой странице гласит:
Если временная таблица создается с именованным ограничением и временная таблица создается в рамках определенной пользователем транзакции, только один пользователь за раз может выполнить инструкцию, которая создает временную таблицу. Например, если хранимая процедура создает временную таблицу с ограничением именованного первичного ключа, хранимая процедура не может выполняться одновременно несколькими пользователями.
Я работаю в среде, где мы широко используем несколько хранимых процедур, использующих индексированные временные таблицы, и у нас никогда не возникало проблем, когда пользователям приходится ждать завершения одного выполнения до начала следующего. Я надеюсь, что так будет и впредь, но я обеспокоен тем, что это может стать проблемой, если это предостережение не будет правильно понято.
В частности, мне неясно по следующим пунктам:
- Это относится только к глобальным временным таблицам или к локальным? Кажется странным, что таблица, которая не видна вне сеанса (как в последнем случае), помешала бы одновременному выполнению другого сеанса.
- Что квалифицируется как «именованное ограничение»? Разве все ограничения не имеют имен (даже если они генерируются системой)? Это относится к ограничениям с пользовательским псевдонимом? Это кажется мне плохой формулировкой.
- «Несколько пользователей» на самом деле означает несколько сеансов? Эти процедуры вызываются через наше приложение с использованием одной учетной записи службы, поэтому 99,9% обращений к нашим сценариям совершаются в БД с помощью этой единственной учетной записи (и я не беспокоюсь о случайных вызовах, которые администратор может сделать на сервере). Если служебная учетная запись может запускать sproc одновременно в нескольких сеансах, тогда эта проблема для меня не имеет значения.