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?

William
la source

Réponses:

257
INSERT INTO #TempTable (ID, Date, Name) 
SELECT id, date, name 
FROM physical_table
Alexsuslin
la source
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
Sheridan
la source
9
J'aime ça parce que je n'ai pas à CREATEle#TempTable
MAbraham1
75
SELECT  ID , Date , Name into #temp from [TableName]
Abdul Saboor
la source
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
maxime
la source
22
SELECT * 
INTO #TempTable
FROM table
Ravi Teja Koneru
la source
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
Ipsita Sethi
la source
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
Taryn
la source
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
Ahsan Ahmad
la source
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.

Robbie Dee
la source
4
INSERT INTO #TempTable(ID, Date, Name)
SELECT OtherID, OtherDate, OtherName FROM PhysicalTable
Yuriy Galanter
la source
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
BHUVANESH MOHANKUMAR
la source
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
Podiluska
la source