Inserir dados na tabela temporária com consulta


144

Eu tenho uma consulta existente que gera dados atuais e gostaria de inseri-la em uma tabela Temp, mas estou tendo alguns problemas ao fazê-lo. Alguém teria alguma idéia de como fazer isso?

Aqui está um exemplo

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%', '%') 

Isso parece produzir meus dados atualmente da maneira que eu preciso, mas eu gostaria de passá-los para uma tabela temporária. Meu problema é que eu sou bastante novo nas Consultas SQL e não consegui encontrar uma maneira de fazer isso. Ou se é mesmo possível. Se não for possível, existe uma maneira melhor de obter os dados que estou procurando WHERE application LIKE isNull('%MORESTUFF%','%')em uma tabela temporária?


2
Em uma #temptabela que já existe ou seria necessário criar uma nova?
Martin Smith

1
@ MartinSmith - seria um novo.
scapegoat17

1
LIKE ISNULL('%MORESTUFF%', '%')sempre será o mesmo LIKE '%MORESTUFF%', não é? Como '% MORESTUFF%' (a string literal) nunca é nula?
Gnud 28/05

Respostas:


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

O SQL Server R2 2008 precisa da AScláusula da seguinte maneira:

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

A consulta falhou sem o AS xno final.


EDITAR

Também é necessário ao usar o SS2016, teve que adicionar as tno final.

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

5
Interessante. Eu apenas tive o mesmo problema. Adicionar "As [x]" no final fez tudo funcionar bem. Por que é isso?
godfathr

5
@godfathr é porque a cláusula from está usando uma tabela derivada #
wootscootinboogie

35

A maneira mais rápida de fazer isso é usando o comando "SELECT INTO", por exemplo

SELECT * INTO #TempTableName
FROM....

Isso criará uma nova tabela, você não precisará criá-la antecipadamente.


É possível adicionar colunas ao #TempTableName?
FrenkyB

@FrenkyB sim, uma vez criada a tabela, você pode usar a instrução ALTER TABLE ADD COLUMN
Yuriy Galanter

12

Pessoalmente, eu precisava de uma mãozinha para descobrir como usar isso e é realmente incrível.

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

Você pode fazer isso assim:

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

Apenas verifique se as colunas estão correspondentes, tanto em número quanto em tipo de dados.


5

Tente o seguinte:

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

Por favor, use o alias com x para que não falhe no script e no resultado.


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

SELECT * FROM #TempTable
DROP TABLE #TempTable

2

Isso é possível. Tente desta maneira:

Create Global Temporary Table 
BossaDoSamba 
On Commit Preserve Rows 
As 
select ArtistName, sum(Songs) As NumberOfSongs 
 from Spotfy 
    where ArtistName = 'BossaDoSamba'
 group by ArtistName;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.