Insertar datos en una tabla temporal

195

Después de haber creado una tabla temporal y declarar los tipos de datos así;

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

¿Cómo inserto los datos relevantes que ya se encuentran en una tabla física dentro de la base de datos?

Guillermo
fuente

Respuestas:

244
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table
alexsuslin
fuente
55
Recuerde soltar la tabla una vez que haya terminado con ella, de lo contrario podría encontrarse con "Ya existe un objeto llamado '#TempTable' en la base de datos". error (debería ejecutar la consulta de nuevo ...)
Rhdr
La pregunta inicial era sobre la tabla, que ya estaba creada. Como la sugerencia es útil, no está relacionada con la pregunta del autor
alexsuslin
98

Para insertar todos los datos de todas las columnas, solo use esto:

SELECT * INTO #TempTable
FROM OriginalTable

No olvide DROPla tabla temporal una vez que haya terminado y antes de intentar crearla nuevamente:

DROP TABLE #TempTable
Sheridan
fuente
9
Me gusta esto porque no tengo a CREATEla#TempTable
MAbraham1
73
SELECT  ID , Date , Name into #temp from [TableName]
Abdul Saboor
fuente
41

Mi forma de Inserthacerlo en SQL Server. Además, generalmente verifico si existe una tabla temporal.

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

SELECT b.Val as 'bVals'
  INTO #MyTable
FROM OtherTable as b
máxima
fuente
21
SELECT * 
INTO #TempTable
FROM table
Ravi Teja Koneru
fuente
La respuesta más simple aquí realmente. También puede usar dbo.MyTable y será una tabla permanente. Easy peasy
Fandango68
15

He proporcionado dos enfoques para resolver el mismo problema,

Solución 1: este enfoque incluye 2 pasos, primero cree una tabla temporal con el tipo de datos especificado, luego inserte el valor de la tabla de datos existente.

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

SELECT * FROM #TempStudent

Solución 2: este enfoque es simple, donde puede insertar directamente los valores en la tabla temporal, donde automáticamente el sistema se encarga de crear la tabla temporal con el mismo tipo de datos de la tabla original.

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

SELECT * FROM #TempStudent
Ipsita Sethi
fuente
Si bien reconozco que esta es una tabla temporal, aún así nunca recomendaría que alguien use varchar (MAX).
bp_
8

La consulta correcta:

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
Ahsan Ahmad
fuente
10
Esta respuesta no tiene nada que ver con la pregunta. Tomó esta información de otro lugar. Extracción new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, etc transforma la respuesta en un duplicado exacto de: stackoverflow.com/a/15762663/1476885
Zanon
7

Después de crear la tabla temporal, simplemente haría un normal INSERT INTO () SELECT FROM

INSERT INTO #TempTable (id, Date, Name)
SELECT t.id, t.Date, t.Name
FROM yourTable t
Taryn
fuente
5
insert into #temptable (col1, col2, col3)
select col1, col2, col3 from othertable

Tenga en cuenta que esto se considera una mala práctica:

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

Si la definición de la tabla temporal cambiara, el código podría fallar en tiempo de ejecución.

Robbie Dee
fuente
4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable
Yuriy Galanter
fuente
3

El funcionamiento básico de la tabla temporal se proporciona a continuación, se modifica y se usa según sus requisitos,

- CREAR UNA TABLA DE TEMPERATURAS

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

- INSERTE EL VALOR EN UNA TABLA DE TEMPERATURAS

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

- CONSULTE UNA TABLA DE TEMP [Esto funcionará solo en la misma sesión / Instancia, no en otra instancia de sesión de usuario]

SELECT * FROM #MyTempEmployeeTable

- BORRAR VALOR EN TABLA TEMP

DELETE FROM #MyTempEmployeeTable

- BAJA UNA TABLA DE TEMPERATURAS

DROP TABLE #MyTempEmployeeTable
BHUVANESH MOHANKUMAR
fuente
Si bien reconozco que esta es una tabla temporal, aún así nunca recomendaría que alguien use varchar (MAX).
bp_
@bp_ Este es un fragmento de muestra generalizado que explica que el usuario y el Usuario pueden especificar el tipo de datos y su tamaño en función de los requisitos de su aplicación.
BHUVANESH MOHANKUMAR
2
insert #temptable
select idfield, datefield, namefield from yourrealtable
podiluska
fuente