Чи потрібно використовувати # для створення тимчасових таблиць на SQL сервері?


91

Чи потрібно використовувати #перед створенням тимчасової таблиці на сервері SQL?

Приклад:

SELECT column1, column2, someInt, someVarChar 
INTO ItemBack1 
FROM table2
WHERE table2.ID = 7

Для ItemBack1 чи потрібно використовувати #символ?

Якщо ні, то яка користь від #створення тимчасових таблиць?


3
Так. # створює тимчасову таблицю. Без нього створюється таблиця.
Jeow Li Huan

Відповіді:


151

Так. Вам потрібно створити префікс назви таблиці з "#" (хеш) для створення тимчасових таблиць.

Якщо вам НЕ потрібна таблиця пізніше, продовжуйте і створюйте її. Тимчасові таблиці дуже схожі на звичайні таблиці. Однак він створюється в tempdb. Крім того, він доступний лише через поточний сеанс, тобто для EG: якщо інший користувач спробує отримати доступ до створеної вами тимчасової таблиці, він не зможе цього зробити.

"##" (подвійний хеш створює "Глобальну" тимчасову таблицю, до якої також можуть отримати доступ інші сеанси.

Зверніться до посилання нижче для Основ тимчасових таблиць: http://www.codeproject.com/Articles/42553/Quick-Overview-Temporary-Tables-in-SQL-Server-2005

Якщо вміст вашої таблиці менше 5000 рядків і НЕ містить типів даних, таких як nvarchar (MAX), varbinary (MAX), розгляньте можливість використання змінних таблиці.

Вони найшвидші, як і будь-які інші змінні, які зберігаються в оперативній пам'яті. Вони також зберігаються у tempdb, а не в оперативній пам'яті .

DECLARE @ItemBack1 TABLE
(
 column1 int,
 column2 int,
 someInt int,
 someVarChar nvarchar(50)
);

INSERT INTO @ItemBack1
SELECT column1, 
       column2, 
       someInt, 
       someVarChar 
  FROM table2
 WHERE table2.ID = 7;

Докладніше про змінні таблиці: http://odetocode.com/articles/365.aspx


11
У SQL Server синтаксис SELECT - INSERT INTO @ ItemBack1 SELECT column1, column2, someInt, someVarChar FROM table2 WHERE table2.ID = 7
mhenry1384

8
Таблиці змінних не зберігаються в оперативній пам'яті, вони також зберігаються в tempdb. Я б рекомендував не використовувати змінні таблиці, якщо ви не розумієте деяких їх мінусів, оскільки їх кількість рядків автоматично встановлюється як одна, і це може призвести до поганих планів.
ConstantineK

Чи можете ви вказати джерело для 5000 рядків, обмежень nvarchar (max), varbinary (max)? Це дозволено, але я не впевнений, чому це не рекомендується.
Бред

1
Я теж думав, що змінні таблиці зберігаються в пам'яті. Я виправлений: dba.stackexchange.com/a/16386/23720
Баодад

1
Я також хочу лише прокоментувати, що факт, що змінні таблиці зберігаються в tempdb. Я коментую, тому, можливо, БІЛЬШЕ людей читають коментарі і втягують їх у голови, оскільки мені так набридло заходити до місця спільного проживання в якості старшого консультанта, щоб доводити сперечатися із штатним працівником, який не знає і намагається сказати інакше. Я розмовляю з десятками компаній у списку Fortune 500, так радий бачити, як люди коментують. СКРИЛО, якщо цей ОП, який відповідає на питання, насправді НЕ РЕДАКТУЄ їхню відповідь, ми будемо продовжувати залишатись цим невігласом ще близько десяти років.
Том Стікель

14

Різниця між цими двома столами ItemBack1і #ItemBack1в тому , що в першу чергу на є постійною (постійне) , де , як і інші тимчасово.

А зараз, якщо ще раз подивіться на ваше запитання

Чи потрібно використовувати # для створення тимчасової таблиці на сервері sql?

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.