Вставлення даних у тимчасову таблицю


195

Після створення тимчасової таблиці та оголошення таких типів даних;

 CREATE TABLE #TempTable(
 ID int,
 Date datetime,
 Name char(20))

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

Відповіді:


244
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table

5
Не забудьте скинути таблицю, коли ви закінчите з нею, інакше ви можете зіткнутися з "У базі даних вже є об'єкт з назвою" #TempTable "." помилка (чи слід запустити запит ще раз ...)
— Rhdr

Початкове питання стосувалося таблиці, яка вже була створена. Оскільки підказка корисна, вона не пов’язана із запитанням автора
— alexsuslin

99

Щоб вставити всі дані з усіх стовпців, просто скористайтеся цим:

SELECT * INTO #TempTable
FROM OriginalTable

Не забудьте до DROPтимчасової таблиці після того, як ви закінчили її і перш ніж спробувати її створити:

DROP TABLE #TempTable

9
Мені це подобається , тому що я не повинен CREATEв#TempTable
— MAbraham1


41

Мій шлях Insertу SQL Server. Також я зазвичай перевіряю, чи існує тимчасова таблиця.

IF OBJECT_ID('tempdb..#MyTable') IS NOT NULL DROP Table #MyTable

SELECT b.Val as 'bVals'
  INTO #MyTable
FROM OtherTable as b


15

Я запропонував два підходи до вирішення одного і того ж питання,

Рішення 1: Цей підхід включає 2 кроки: спочатку створіть тимчасову таблицю із заданим типом даних, потім вставте значення з існуючої таблиці даних.

CREATE TABLE #TempStudent(tempID  int, tempName  varchar(MAX) )
INSERT INTO #TempStudent(tempID, tempName) SELECT id, studName FROM students where id =1

SELECT * FROM #TempStudent

Рішення 2: Цей підхід простий, де ви можете безпосередньо вставити значення у тимчасову таблицю, де система автоматично піклується про створення тимчасової таблиці з тим самим типом даних вихідної таблиці.

SELECT id, studName  INTO #TempStudent FROM students where id =1

SELECT * FROM #TempStudent

Хоча я визнаю, що це тимчасова таблиця, я все одно ніколи не рекомендував би комусь використовувати varchar (MAX).
— bp_

8

Правильний запит:

drop table #tmp_table

select new_acc_no, count(new_acc_no) as count1
into #tmp_table
from table
where unit_id = '0007' 
group by unit_id, new_acc_no
having count(new_acc_no) > 1

10
Ця відповідь не має нічого спільного з питанням. Ви взяли цю інформацію з іншого місця. Видалення new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1і т.д. прообрази відповідь в точній дубліката: stackoverflow.com/a/15762663/1476885
— Zanon

7

Після створення таблиці темп ви просто зробите звичайну INSERT INTO () SELECT FROM

INSERT INTO #TempTable (id, Date, Name)
SELECT t.id, t.Date, t.Name
FROM yourTable t

5
insert into #temptable (col1, col2, col3)
select col1, col2, col3 from othertable

Зауважте, що це вважається поганою практикою:

insert into #temptable 
select col1, col2, col3 from othertable

Якщо визначення таблиці темп було змінено, код може вийти з ладу під час виконання.



3

Основна робота Тимчасової таблиці наведена нижче, змінюйте та використовуйте відповідно до ваших вимог,

- СТВОРИТТЕ ТАБЛИЦЮ ТЕМП

CREATE TABLE #MyTempEmployeeTable(tempUserID  varchar(MAX), tempUserName  varchar(MAX) )

- ВСТАВИТИ ЦІННІСТЬ У ТАБЛИЦЮ ТЕМП

INSERT INTO #MyTempEmployeeTable(tempUserID,tempUserName) SELECT userid,username FROM users where userid =21

- ЗАПИТАННЯ ТАБЛИЦІ ТЕМПИ [Це буде працювати лише в тому ж сеансі / Екземплярі, не в іншому екземплярі сеансу користувача]

SELECT * FROM #MyTempEmployeeTable

- ВИДАЛИТИ ЦІННІСТЬ У ТАБЛИЦІ ТЕМП

DELETE FROM #MyTempEmployeeTable

- ЗРОЗНІТЬ ТАБЛИЦЮ ТЕМП

DROP TABLE #MyTempEmployeeTable

Хоча я визнаю, що це тимчасова таблиця, я все одно ніколи не рекомендував би комусь використовувати varchar (MAX).
— bp_

@bp_ Це узагальнений фрагмент зразка, який пояснює, що користувач може вказати тип даних та його розмір, виходячи зі своїх вимог щодо застосування.
— БХУВАНЕШ МОХАНКУМАР

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