Что означает «выбрать временную таблицу»? - PullRequest
0 голосов
/ 16 апреля 2010

Этот ответ немного смутил меня. Что такое «выбор для временной таблицы», и может ли кто-нибудь показать мне простой пример этого?

Ответы [ 5 ]

2 голосов
/ 16 апреля 2010

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

Или вам действительно нужно перебирать строки не заданным способом, вы можете использовать временную таблицу (или CURSOR)

Если вы выполняете простое CRUD для БД, то, вероятно, вам не нужны временные таблицы

У вас есть:

  • переменные таблицы: DECLARE @foo TABLE (bar int...)
  • Эксплицировать временные таблицы: CREATE TABLE #foo (bar int...)
  • встроено: SELECT ... INTO #foo FROM...
2 голосов
/ 16 апреля 2010

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

В SQL Server все временные таблицы начинаются с префикса #, поэтому, если вы выполните оператор типа

Create table #tmp(id int, columnA)

Тогда SQL Server автоматически узнает, что таблица временная, и будет уничтожена, когда хранимая процедура выйдет из области видимости, если таблица явно не будет удалена, как

drop table #tmp

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

В SQL Server все временные таблицы находятся в базе данных tempdb.

См. эту статью для получения дополнительной информации.

1 голос
/ 16 апреля 2010

Думайте о временных таблицах как о переменной типа sql table. Используйте их в скриптах и ​​хранимых процедурах. Это удобно, когда вам нужно манипулировать данными, которые являются не простым значением, а подмножеством таблицы базы данных (как вертикальной, так и горизонтальной).

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

Пример использования см. ответ .

1 голос
/ 16 апреля 2010

Временная таблица - это таблица, которая динамически создается с использованием такого синтаксиса:

SELECT [columns] INTO #MyTable FROM SomeExistingTable

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

SELECT FirstName FROM #MyTable WHERE...

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

НТН

1 голос
/ 16 апреля 2010

Вы можете использовать SELECT ... INTO, чтобы создать временную таблицу и заполнить ее следующим образом:

SELECT Col1, Col2... 
INTO #Table
FROM ...
WHERE ...

(Кстати, этот синтаксис предназначен для SQL Server и Sybase.)

РЕДАКТИРОВАТЬ После того, как вы создали таблицу, как я делал выше, вы можете использовать ее для других запросов в том же соединении:

Select
From OtherTable
    Join #Table
        On #Table.Col = OtherTable.Col

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

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