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

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
75
SELECT  ID , Date , Name into #temp from [TableName]
Абдул Сабур
источник
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

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

Робби Ди
источник
4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable
Юрий Галантер
источник
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_ Это обобщенный пример фрагмента, который объясняет пользователя, и пользователь может указать тип данных и его размер в зависимости от требований своего приложения.
БХУВАНЕШ МОХАНКУМАР
2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Подилуска
источник