2012-08-02 33 views
131

Después de haber creado una tabla temporal y de declarar los tipos de datos como tales;Insertar datos en una tabla temporal

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

¿Cómo puedo luego insertar los datos relevantes que ya están almacenados en una tabla física dentro de la base de datos?

Respuesta

165
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table 
2
insert #temptable 
select idfield, datefield, namefield from yourrealtable 
4

Después de crear la tabla temporal que acaba de hacer una normal de INSERT INTO() SELECT FROM

INSERT INTO #TempTable (id, Date, Name) 
SELECT t.id, t.Date, t.Name 
FROM yourTable t 
4
INSERT INTO #TempTable(ID, Date, Name) 
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable 
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 el tiempo de ejecución.

53
SELECT ID , Date , Name into #temp from [TableName] 
7

La consulta derecha:

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 
+8

Esta respuesta no tiene nada que ver con la cuestión. Usted tomó esta información de otro lado. Al eliminar 'new_acc_no',' unit_id = '0007'', 'group by',' having count (new_acc_no)> 1', etc. se transforma la respuesta en un duplicado exacto de: http://stackoverflow.com/a/15762663/ 1476885 – Zanon

23

Mi forma de Insert en SQL Server. También suelo verificar 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 
47

Para insertar todos los datos de todas las columnas, sólo tiene que utilizar esto:

SELECT * INTO #TempTable 
FROM OriginalTable 

No se olvide de DROP la tabla temporal después de haber terminado con ella y antes de que intente crear de nuevo :

DROP TABLE #TempTable 
+3

Me gusta porque no tengo que 'CREAR' el '# TempTable' – MAbraham1

9
SELECT * 
INTO #TempTable 
FROM table 
+0

La respuesta más simple aquí realmente. También puede usar dbo.MyTable y será una tabla permanente. Easy peasy – Fandango68

1

funcionamiento básico de Tempo Rary tabla se da a continuación, modificar y utilizar según sus necesidades,

- Crear una tabla TEMP

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

- insertar un valor en una tabla TEMP

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

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

SELECT * FROM #MyTempEmployeeTable 

- BORRAR valor de la tabla TEMP

DELETE FROM #MyTempEmployeeTable 

- eliminar una tabla TEMP

DROP TABLE #MyTempEmployeeTable 
+0

Aunque reconozco que esta es una tabla temporal, aún así nunca recomendaría que alguien use varchar (MAX). –

+0

@bp_ Este es un fragmento de muestra generalizado que explica al usuario y el usuario puede especificar el tipo de datos y su tamaño en función de los requisitos de su aplicación. –

3

que he proporcionado dos enfoques para resolver el mismo problema,

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

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 se puede insertar directamente los valores de tabla temporal, donde automáticamente el sistema se encargue de crear la tabla temporal con el mismo tipo de datos de originales mesa.

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

SELECT * FROM #TempStudent 
+0

Aunque reconozco que esta es una tabla temporal, todavía nunca recomendaría que alguien use varchar (MAX). –

Cuestiones relacionadas