Когда использовать временную таблицу в SQL Server 2005

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

локальный темп означает # глобальный темп означает ## переменные таблицы используют функции объявления