Что означает «выбрать временную таблицу»?

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


person Community    schedule 16.04.2010    source источник


Ответы (5)


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

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

Create table #tmp(id int, columnA)

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

drop table #tmp

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

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

Дополнительную информацию см. в этой статье.

person Jeremy    schedule 16.04.2010

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

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

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

У вас есть:

  • табличные переменные: DECLARE @foo TABLE (bar int...)
  • явные временные таблицы: CREATE TABLE #foo (bar int...)
  • встроенный создан: SELECT ... INTO #foo FROM...
person gbn    schedule 16.04.2010

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

SELECT [columns] INTO #MyTable FROM SomeExistingTable

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

SELECT FirstName FROM #MyTable WHERE...

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

ХТН

person LesterDove    schedule 16.04.2010

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

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

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

ИЗМЕНИТЬ После того, как вы создали таблицу, как я сделал выше, вы можете использовать ее для других запросов в том же соединении:

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

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

person Thomas    schedule 16.04.2010
comment
я до сих пор не понимаю, как его использовать. - person ; 16.04.2010

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

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

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

person topchef    schedule 16.04.2010