Einfügen von Daten in eine temporäre Tabelle


195

Nachdem Sie eine temporäre Tabelle erstellt und die Datentypen wie folgt deklariert haben;

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

Wie füge ich dann die relevanten Daten ein, die bereits in einer physischen Tabelle in der Datenbank gespeichert sind?

Antworten:


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

5
Denken Sie daran, die Tabelle zu löschen, sobald Sie damit fertig sind. Andernfalls wird möglicherweise die Meldung "In der Datenbank befindet sich bereits ein Objekt mit dem Namen '#TempTable'" angezeigt. Fehler (sollten Sie die Abfrage erneut
ausführen

Die erste Frage betraf die Tabelle, die bereits erstellt wurde. Da der Tipp nützlich ist, ist er nicht mit der Frage des Autors verbunden
alexsuslin

98

Verwenden Sie einfach Folgendes, um alle Daten aus allen Spalten einzufügen:

SELECT * INTO #TempTable
FROM OriginalTable

Vergessen Sie nicht, DROPdie temporäre Tabelle zu verwenden, nachdem Sie damit fertig sind und bevor Sie versuchen, sie erneut zu erstellen:

DROP TABLE #TempTable

9
Ich mag das , weil ich habe nicht zu CREATEdem#TempTable
MAbraham1


41

Mein Weg Insertin SQL Server. Außerdem überprüfe ich normalerweise, ob eine temporäre Tabelle vorhanden ist.

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

Einfachste Antwort hier wirklich. Sie können auch dbo.MyTable verwenden und es wird eine permanente Tabelle sein. Einfach peasy
Fandango68

15

Ich habe zwei Ansätze zur Lösung des gleichen Problems angegeben:

Lösung 1: Dieser Ansatz umfasst zwei Schritte: Erstellen Sie zunächst eine temporäre Tabelle mit dem angegebenen Datentyp und fügen Sie anschließend den Wert aus der vorhandenen Datentabelle ein.

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

SELECT * FROM #TempStudent

Lösung 2: Dieser Ansatz ist einfach: Sie können die Werte direkt in eine temporäre Tabelle einfügen, wobei das System automatisch dafür sorgt, dass die temporäre Tabelle mit demselben Datentyp wie die ursprüngliche Tabelle erstellt wird.

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

SELECT * FROM #TempStudent

Obwohl ich erkenne, dass dies eine temporäre Tabelle ist, würde ich niemals jemandem empfehlen, varchar (MAX) zu verwenden.
bp_

8

Die richtige Frage:

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
Diese Antwort hat nichts mit der Frage zu tun. Sie haben diese Informationen von einem anderen Ort übernommen. Entfernen new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, etc. verwandeln die Antwort in einer exakten Kopie von: stackoverflow.com/a/15762663/1476885
Zanon

7

Nachdem Sie die temporäre Tabelle erstellt haben, führen Sie einfach eine normale aus 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

Beachten Sie, dass dies als schlechte Praxis angesehen wird:

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

Wenn sich die Definition der temporären Tabelle ändern sollte, könnte der Code zur Laufzeit fehlschlagen.


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

3

Die grundlegende Funktionsweise der temporären Tabelle ist unten angegeben. Sie können sie gemäß Ihren Anforderungen ändern und verwenden.

- ERSTELLEN SIE EINE TEMP-TABELLE

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

- WERT IN EINE TEMP-TABELLE EINFÜGEN

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

- TEMP-TABELLE ABFRAGEN [Dies funktioniert nur in derselben Sitzung / Instanz, nicht in einer anderen Benutzersitzungsinstanz]

SELECT * FROM #MyTempEmployeeTable

- LÖSCHEN SIE DEN WERT IN DER TEMP-TABELLE

DELETE FROM #MyTempEmployeeTable

- TROPFEN SIE EINE TEMP-TABELLE

DROP TABLE #MyTempEmployeeTable

Obwohl ich erkenne, dass dies eine temporäre Tabelle ist, würde ich niemals jemandem empfehlen, varchar (MAX) zu verwenden.
bp_

@bp_ Dies ist ein verallgemeinertes Beispiel-Snippet, in dem der Benutzer erklärt wird und der Benutzer den Datentyp und seine Größe basierend auf seinen Anwendungsanforderungen angeben kann.
BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.