Когда использовать временную таблицу в SQL Server 2005 - PullRequest
13 голосов
/ 07 ноября 2010

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

Ответы [ 2 ]

16 голосов
/ 07 ноября 2010

Наиболее распространенный сценарий использования временных таблиц - это хранимая процедура.

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

Одним из распространенных сценариев использования временных таблиц является сохранение результатов оператора SELECT INTO

Переменная таблицы является относительно новой (введена в SQL Server 2005 - насколько я помню), может использоваться вместо временной таблицы в большинстве случаев. Некоторые различия между ними обсуждаются здесь

Во многих случаях, особенно в приложениях OLTP, использование временных таблиц в ваших процедурах означает, что у вас МОЖЕТ , возможно, есть логика бизнес-обработки в вашей базе данных, и вы могли бы пересмотреть ее. Ваш дизайн - особенно в случае систем n уровня, имеющих отдельный бизнес-уровень в своем приложении.

11 голосов
/ 07 ноября 2010

Основное различие между этими тремя аспектами - это срок службы и область применения.

Под глобальной таблицей я предполагаю, что вы имеете в виду стандартный прогон таблицы фрезерования.Таблицы используются для хранения постоянных данных.Они доступны всем зарегистрированным пользователям.Любые сделанные вами изменения видны другим пользователям и наоборот.

Временная таблица существует исключительно для хранения данных в течение сеанса.Лучшее время для использования временных таблиц - это когда вам нужно хранить информацию на сервере SQL для использования в нескольких транзакциях SQL.Как обычная таблица, вы создадите ее, будете взаимодействовать с ней (вставлять / обновлять / удалять), а когда вы закончите, вы ее отбросите.Есть два различия между таблицей и временной таблицей.

  1. Временная таблица видна только вам.Даже если кто-то создаст временную таблицу с тем же именем, никто не сможет увидеть или повлиять на вашу временную таблицу.
  2. Временная таблица существует до тех пор, пока вы вошли в систему, если вы явно не удалите ее.Это.Если вы выйдете из системы или отключитесь, SQL Server автоматически очистит его для вас.Это также означает, что данные не являются постоянными.Если вы создаете временную таблицу в одном сеансе и выходите из системы, ее не будет при повторном входе в систему.

Переменная таблицы работает как любая переменная в SQL Server.Это используется для хранения данных для использования в одной транзакции.Это относительно новая функция TSQL и обычно используется для передачи данных между процедурами, например, для передачи массива.Существует три различия между таблицей и табличной переменной.

  1. Как временная таблица, она видна только вам.
  2. Поскольку это переменная, ее можно передавать вокругмежду хранимыми процедурами.
  3. Временная таблица существует только в текущей транзакции.Как только SQL Server завершает транзакцию (с помощью операторов GO или END TRANSACTION) или выходит из области видимости, он будет освобожден.

Лично я по нескольким причинам избегаю использования временных таблиц и табличных переменных.,Во-первых, синтаксис для них специфичен для Microsoft.Если ваша программа будет взаимодействовать с несколькими СУБД, не используйте их.Кроме того, временные таблицы и табличные переменные имеют тенденцию увеличивать сложность некоторых запросов SQL.Если ваш код может быть выполнен с использованием более простого метода, я бы порекомендовал использовать простой.

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