Insertion de données dans une table temporaire


204

Après avoir créé une table temporaire et déclaré les types de données comme ceci;

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

Comment puis-je insérer les données pertinentes qui se trouvent déjà sur une table physique dans la base de données?

Réponses:


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

7
N'oubliez pas de supprimer la table une fois que vous en avez terminé avec elle, sinon vous risquez de tomber sur "Il y a déjà un objet nommé '#TempTable' dans la base de données." erreur (si vous exécutez à nouveau la requête ...)
Rhdr

La question initiale portait sur la table, qui était déjà créée. Comme le conseil est utile, il n'est pas lié à la question de l'auteur
alexsuslin

@alexsuslin c'est connecté, ne sois pas comme ça 😒
Josué Zatarain Espinosa

107

Pour insérer toutes les données de toutes les colonnes, utilisez simplement ceci:

SELECT * INTO #TempTable
FROM OriginalTable

N'oubliez pas DROPla table temporaire une fois que vous en avez terminé et avant d'essayer de la créer à nouveau:

DROP TABLE #TempTable

9
J'aime ça parce que je n'ai pas à CREATEle#TempTable
MAbraham1


43

Ma façon de Insertdans SQL Server. Aussi, je vérifie généralement si une table temporaire existe.

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

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

22
SELECT * 
INTO #TempTable
FROM table

Réponse la plus simple ici vraiment. Vous pouvez également utiliser dbo.MyTable et ce sera une table permanente. Easy peasy
Fandango68

16

J'ai proposé deux approches pour résoudre le même problème,

Solution 1: cette approche comprend 2 étapes, créez d'abord une table temporaire avec le type de données spécifié, puis insérez la valeur de la table de données existante.

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

SELECT * FROM #TempStudent

Solution 2: Cette approche est simple, où vous pouvez insérer directement les valeurs dans la table temporaire, où automatiquement le système se charge de créer la table temporaire avec le même type de données que la table d'origine.

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

SELECT * FROM #TempStudent

Bien que je reconnaisse qu'il s'agit d'une table temporaire, je ne recommanderais toujours jamais à quelqu'un d'utiliser varchar (MAX).
bp_

7

Après avoir créé la table temporaire, vous feriez simplement un INSERT INTO () SELECT FROM

INSERT INTO #TempTable (id, Date, Name)
SELECT t.id, t.Date, t.Name
FROM yourTable t

7

La bonne requête:

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
Cette réponse n'a rien à voir avec la question. Vous avez pris cette information ailleurs. Retrait new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, etc transforme la réponse en une copie exacte: stackoverflow.com/a/15762663/1476885
Zanon

5
insert into #temptable (col1, col2, col3)
select col1, col2, col3 from othertable

Notez que cela est considéré comme une mauvaise pratique:

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

Si la définition de la table temporaire devait changer, le code pourrait échouer lors de l'exécution.


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

3

Le fonctionnement de base de la table temporaire est indiqué ci-dessous, modifiez et utilisez selon vos besoins,

- CRÉER UNE TABLE DE TEMPÉRATURE

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

- INSÉRER LA VALEUR DANS UN TABLEAU DE TEMPÉRATURE

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

- QUERY A TEMP TABLE [Cela ne fonctionnera que dans la même session / instance, pas dans une autre instance de session utilisateur]

SELECT * FROM #MyTempEmployeeTable

- SUPPRIMER LA VALEUR DANS LE TABLEAU TEMP

DELETE FROM #MyTempEmployeeTable

- DÉPOSER UNE TABLE DE TEMPÉRATURE

DROP TABLE #MyTempEmployeeTable

Bien que je reconnaisse qu'il s'agit d'une table temporaire, je ne recommanderais toujours jamais à quelqu'un d'utiliser varchar (MAX).
bp_

@bp_ Ceci est un extrait de code généralisé qui explique que l'utilisateur et l'utilisateur peuvent spécifier le type de données et sa taille en fonction des exigences de leur application.
BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.