Inserimento di dati in una tabella temporanea


195

Dopo aver creato una tabella temporanea e dichiarato i tipi di dati in questo modo;

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

Come posso quindi inserire i dati rilevanti già presenti su una tabella fisica all'interno del database?

Risposte:


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

5
Ricorda di eliminare la tabella una volta terminato, altrimenti potresti imbatterti nel "Nel database è già presente un oggetto denominato" #TempTable "." errore (dovresti eseguire nuovamente la query ...)
Rhdr

La domanda iniziale riguardava la tabella, che era già stata creata. Poiché il suggerimento è utile, non è collegato alla domanda dell'autore
alexsuslin,

99

Per inserire tutti i dati da tutte le colonne, basta usare questo:

SELECT * INTO #TempTable
FROM OriginalTable

Non dimenticare DROPla tabella temporanea dopo aver finito con essa e prima di provare a crearla di nuovo:

DROP TABLE #TempTable

9
Mi piace questo perché io non devo CREATEil#TempTable
MAbraham1


41

Il mio modo di Insertin SQL Server. Inoltre di solito controllo se esiste una tabella temporanea.

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

SELECT b.Val as 'bVals'
  INTO #MyTable
FROM OtherTable as b

21
SELECT * 
INTO #TempTable
FROM table

La risposta più semplice qui davvero. Puoi anche usare dbo.MyTable e sarà una tabella permanente. Facile peasy
Fandango68

15

Ho fornito due approcci per risolvere lo stesso problema,

Soluzione 1: questo approccio prevede 2 passaggi, innanzitutto creare una tabella temporanea con il tipo di dati specificato, quindi inserire il valore dalla tabella di dati esistente.

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

SELECT * FROM #TempStudent

Soluzione 2: questo approccio è semplice, in cui è possibile inserire direttamente i valori nella tabella temporanea, in cui automaticamente il sistema si occupa della creazione della tabella temporanea con lo stesso tipo di dati della tabella originale.

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

SELECT * FROM #TempStudent

Mentre riconosco che questa è una tabella temporanea, non consiglierei mai a nessuno di usare varchar (MAX).
bp_

8

La domanda giusta:

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
Questa risposta non ha nulla a che fare con la domanda. Hai preso queste informazioni da qualche altra parte. La rimozione new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, ecc trasforma la risposta in un duplicato esatto: stackoverflow.com/a/15762663/1476885
Zanon

7

Dopo aver creato la tabella temporanea, faresti semplicemente una cosa normale 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

Si noti che questa è considerata una cattiva pratica:

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

Se la definizione della tabella temporanea dovesse cambiare, il codice potrebbe non riuscire in fase di esecuzione.


4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable

3

Le operazioni di base della tabella temporanea sono riportate di seguito, modificate e utilizzate secondo le vostre esigenze,

- CREA UNA TABELLA TEMP

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

- INSERIRE IL VALORE IN UNA TABELLA TEMP

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

- QUERY A TEMP TABLE [Funzionerà solo nella stessa sessione / Istanza, non in un'altra istanza di sessione utente]

SELECT * FROM #MyTempEmployeeTable

- ELIMINA VALORE NELLA TABELLA TEMP

DELETE FROM #MyTempEmployeeTable

- GOCCIA UNA TABELLA TEMP

DROP TABLE #MyTempEmployeeTable

Mentre riconosco che questa è una tabella temporanea, non consiglierei mai a nessuno di usare varchar (MAX).
bp_

@bp_ Questo è uno snippet di esempio generalizzato che spiega che l'utente e l'utente possono specificare il tipo di dati e le sue dimensioni in base ai requisiti dell'applicazione.
BHUVANESH MOHANKUMAR,

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.