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


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.