Вставка данных во временную таблицу


204

После создания временной таблицы и объявления таких типов данных;

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

Как мне затем вставить соответствующие данные, которые уже хранятся в физической таблице в базе данных?

Ответы:


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

7
Не забудьте отбросить таблицу после того, как вы закончите с ней, иначе вы можете столкнуться с сообщением «В базе данных уже есть объект с именем '#TempTable'». ошибка (если вы снова запустите запрос ...)
Rhdr

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

@alexsuslin это связано, не будь таким 😒
Josué Zatarain Espinosa

107

Чтобы вставить все данные из всех столбцов, просто используйте это:

SELECT * INTO #TempTable
FROM OriginalTable

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

DROP TABLE #TempTable

9
Мне это нравится , потому что я не должен CREATEв#TempTable
MAbraham1


43

Мой способ 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

22
SELECT * 
INTO #TempTable
FROM table

Самый простой ответ здесь на самом деле. Вы также можете использовать dbo.MyTable, и это будет постоянная таблица. Easy Peasy
Fandango68

16

Я предложил два подхода к решению одной и той же проблемы,

Решение 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_

7

После того, как вы создадите временную таблицу, вы просто выполните обычный INSERT INTO () SELECT FROM

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

7

Правильный запрос:

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

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

Обратите внимание, что это считается плохой практикой:

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

Если определение временной таблицы изменится, код может выйти из строя во время выполнения.



3

Основные операции временной таблицы приведены ниже, измените и используйте в соответствии с вашими требованиями,

- СОЗДАТЬ ТАБЛИЦУ TEMP

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.