Wstawianie danych do tabeli tymczasowej


195

Po utworzeniu tabeli tymczasowej i zadeklarowaniu podobnych typów danych;

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

Jak następnie wstawić odpowiednie dane, które są już przechowywane na fizycznym stole w bazie danych?

Odpowiedzi:


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

5
Pamiętaj, aby po zakończeniu upuścić tabelę, w przeciwnym razie możesz natknąć się na „W bazie danych znajduje się już obiekt o nazwie„ #TempTable ”.” błąd (należy ponownie uruchomić zapytanie ...)
Rhdr 29.04.19

Początkowe pytanie dotyczyło tabeli, która została już utworzona. Ponieważ wskazówka jest przydatna, nie jest powiązana z pytaniem autora
alexsuslin,

98

Aby wstawić wszystkie dane ze wszystkich kolumn, użyj tego:

SELECT * INTO #TempTable
FROM OriginalTable

Nie zapomnij o DROPtymczasowym stole po jego zakończeniu i przed ponownym utworzeniem:

DROP TABLE #TempTable

9
Lubię to, bo nie mam do CREATEtej#TempTable
MAbraham1


41

Moja droga Insertw SQL Server. Zazwyczaj sprawdzam również, czy istnieje tabela tymczasowa.

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

Najprostsza odpowiedź tutaj naprawdę. Możesz także użyć dbo.MyTable i będzie to stały stół. Łatwy peasy
Fandango68

15

Podałem dwa podejścia do rozwiązania tego samego problemu,

Rozwiązanie 1: To podejście obejmuje 2 kroki, najpierw utwórz tabelę tymczasową o określonym typie danych, a następnie wstaw wartość z istniejącej tabeli danych.

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

SELECT * FROM #TempStudent

Rozwiązanie 2: To podejście jest proste, w którym można bezpośrednio wstawić wartości do tabeli tymczasowej, gdzie system automatycznie zadba o utworzenie tabeli tymczasowej z tym samym typem danych, co tabela pierwotna.

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

SELECT * FROM #TempStudent

Chociaż zdaję sobie sprawę, że jest to tabela tymczasowa, nadal nie polecam nikomu używania varchar (MAX).
bp_

8

Właściwe zapytanie:

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
Ta odpowiedź nie ma nic wspólnego z pytaniem. Zabrałeś tę informację skądś indziej. Demontaż new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, itd przekształca odpowiedź na dokładną kopią: stackoverflow.com/a/15762663/1476885
Zanon

7

Po utworzeniu tabeli tymczasowej zrobiłbyś normalne 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

Pamiętaj, że jest to uważane za złą praktykę:

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

Jeśli definicja tabeli tymczasowej ulegnie zmianie, kod może się nie powieść w czasie wykonywania.


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

3

Podstawową obsługę tabeli tymczasowej podano poniżej, zmodyfikuj i używaj zgodnie z własnymi wymaganiami,

- STWÓRZ TABELĘ TEMP

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

- WSTAW WARTOŚĆ DO TABELI TEMP

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

- ZAPYTAJ TABELĘ TEMP [To będzie działać tylko w tej samej sesji / Instancji, a nie w innej instancji sesji użytkownika]

SELECT * FROM #MyTempEmployeeTable

- USUŃ WARTOŚĆ Z TABELI TEMP

DELETE FROM #MyTempEmployeeTable

- OPUSZCZ TABELĘ TEMP

DROP TABLE #MyTempEmployeeTable

Chociaż zdaję sobie sprawę, że jest to tabela tymczasowa, nadal nie polecam nikomu używania varchar (MAX).
bp_

@bp_ Jest to uogólniony fragment próbki, który wyjaśnia, że ​​użytkownik i użytkownik mogą określić typ danych i ich rozmiar w zależności od wymagań aplikacji.
BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.