Inserisci i dati nella tabella temporanea con query


144

Ho una query esistente che genera dati correnti e vorrei inserirla in una tabella Temp, ma sto riscontrando dei problemi nel farlo. Qualcuno avrebbe qualche idea su come farlo?

Ecco un esempio

SELECT *
FROM  (SELECT Received,
              Total,
              Answer,
              ( CASE
                  WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                END ) AS application
       FROM   FirstTable
       WHERE  Recieved = 1
              AND application = 'MORESTUFF'
       GROUP  BY CASE
                   WHEN application LIKE '%STUFF%' THEN 'MORESTUFF'
                 END) data
WHERE  application LIKE isNull('%MORESTUFF%', '%') 

Questo sembra produrre i miei dati attualmente nel modo in cui ne ho bisogno, ma vorrei passarli in una tabella temporanea. Il mio problema è che sono piuttosto nuovo alle query SQL e non sono stato in grado di trovare un modo per farlo. O se è persino possibile. Se ciò non è possibile, esiste un modo migliore per ottenere i dati che sto cercando WHERE application LIKE isNull('%MORESTUFF%','%')in una tabella temporanea?


2
In una #temptabella che esiste già o avrebbe bisogno di crearne una nuova?
Martin Smith,

1
@MartinSmith - Sarebbe uno nuovo.
capro espiatorio17

1
LIKE ISNULL('%MORESTUFF%', '%')sarà sempre lo stesso LIKE '%MORESTUFF%', no? Dato che '% MORESTUFF%' (il letterale stringa) non è mai nullo?
gnud,

Risposte:


187
SELECT *
INTO #Temp
FROM

  (SELECT
     Received,
     Total,
     Answer,
     (CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) AS application
   FROM
     FirstTable
   WHERE
     Recieved = 1 AND
     application = 'MORESTUFF'
   GROUP BY
     CASE WHEN application LIKE '%STUFF%' THEN 'MORESTUFF' END) data
WHERE
  application LIKE
    isNull(
      '%MORESTUFF%',
      '%')

148

SQL Server R2 2008 richiede la ASclausola come segue:

SELECT * 
INTO #temp
FROM (
    SELECT col1, col2
    FROM table1
) AS x

La query non è riuscita senza il AS xalla fine.


MODIFICARE

È anche necessario quando si utilizza SS2016, ha dovuto aggiungere as talla fine.

 Select * into #result from (SELECT * FROM  #temp where [id] = @id) as t //<-- as t

5
Interessante. Ho appena avuto lo stesso problema. Aggiungendo "As [x]" alla fine tutto ha funzionato bene. Perchè è questo?
godfathr,

5
@godfathr è perché la clausola from utilizza una tabella derivata
wootscootinboogie

35

Il modo più veloce per farlo è usare il comando "SELEZIONA IN" ad es

SELECT * INTO #TempTableName
FROM....

Questo creerà una nuova tabella, non è necessario crearla in anticipo.


È possibile aggiungere colonne a #TempTableName?
FrenkyB

@FrenkyB sì, una volta creata la tabella puoi usare l'istruzione ALTER TABLE ADD COLUMN
Yuriy Galanter,

12

Personalmente, avevo bisogno di una manina che mi tenesse a capire come usarlo ed è davvero fantastico.

IF(OBJECT_ID('tempdb..#TEMP') IS NOT NULL) BEGIN DROP TABLE #TEMP END
        SELECT *
            INTO #TEMP
            FROM (
            The query you want to use many times
            ) AS X

SELECT * FROM #TEMP WHERE THIS = THAT
SELECT * FROM #TEMP WHERE THIS <> THAT
SELECT COL1,COL3 FROM #TEMP WHERE THIS > THAT

DROP TABLE #TEMP

8

Puoi farlo in questo modo:

INSERT INTO myTable (colum1, column2)
SELECT column1, column2 FROM OtherTable;

Assicurati solo che le colonne corrispondano, sia in numero che in tipo di dati.


5

Prova questo:

SELECT *
INTO #Temp
FROM 
(select * from tblorders where busidate ='2016-11-24' and locationID=12
) as X

Si prega di utilizzare l'alias con x in modo da non fallire lo script e il risultato.


3
SELECT * INTO #TempTable 
FROM SampleTable
WHERE...

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Questo è possibile. Prova in questo modo:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
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.