Inserindo dados em uma tabela temporária


195

Depois de criar uma tabela temporária e declarar os tipos de dados assim;

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

Como insiro os dados relevantes que já estão em uma tabela física no banco de dados?

Respostas:


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

5
Lembre-se de descartar a tabela assim que terminar, caso contrário, você poderá encontrar o "Já existe um objeto chamado '#TempTable' no banco de dados". erro (você deve executar a consulta novamente ...)
Rhdr

A pergunta inicial era sobre a tabela, que já estava criada. Como a dica é útil, ele não está ligado à questão do autor
alexsuslin

98

Para inserir todos os dados de todas as colunas, basta usar este:

SELECT * INTO #TempTable
FROM OriginalTable

Não se esqueça DROPda tabela temporária depois de terminar com ela e antes de tentar criá-la novamente:

DROP TABLE #TempTable

9
Eu gosto disso porque eu não tenho que CREATEo#TempTable
MAbraham1


41

Meu jeito de Insertno SQL Server. Também costumo verificar se existe uma tabela temporária.

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

Resposta mais simples aqui realmente. Você também pode usar o dbo.MyTable e será uma tabela permanente. Fácil peasy
Fandango68

15

Forneci duas abordagens para resolver o mesmo problema,

Solução 1: essa abordagem inclui 2 etapas, primeiro crie uma tabela temporária com o tipo de dados especificado, depois insira o valor da tabela de dados existente.

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

SELECT * FROM #TempStudent

Solução 2: Essa abordagem é simples, onde é possível inserir diretamente os valores na tabela temporária, onde o sistema automaticamente cria a tabela temporária com o mesmo tipo de dados da tabela original.

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

SELECT * FROM #TempStudent

Embora reconheça que esta é uma tabela temporária, ainda assim nunca recomendaria alguém usar varchar (MAX).
22818

8

A consulta correta:

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
Esta resposta não tem nada a ver com a pergunta. Você pegou essas informações de outro lugar. Remoção new_acc_no, unit_id = '0007', group by, having count(new_acc_no) > 1, etc transforma a resposta em uma duplicata exata: stackoverflow.com/a/15762663/1476885
Zanon

7

Depois de criar a tabela temporária, você faria apenas um procedimento normal. 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

Observe que isso é considerado uma má prática:

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

Se a definição da tabela temporária mudar, o código poderá falhar no tempo de execução.


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

3

A operação básica da tabela temporária é fornecida abaixo, modifica e usa conforme seus requisitos,

- CRIAR UMA TABELA DE TEMP

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

- INSERIR VALOR EM UMA TABELA DE TEMP

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

- CONSULTE UMA TABELA DE TEMP [Isso funcionará apenas na mesma sessão / instância, não em outra instância da sessão do usuário]

SELECT * FROM #MyTempEmployeeTable

- EXCLUIR VALOR NA TABELA TEMP

DELETE FROM #MyTempEmployeeTable

- DROP A TEMP TABLE

DROP TABLE #MyTempEmployeeTable

Embora reconheça que esta é uma tabela temporária, ainda assim nunca recomendaria alguém usar varchar (MAX).
22818

@bp_ Este é um trecho de amostra generalizado que explica que o usuário e o usuário podem especificar o tipo de dados e seu tamanho com base nos requisitos de aplicativos.
BHUVANESH MOHANKUMAR

2
insert #temptable
select idfield, datefield, namefield from yourrealtable
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.