2012-01-23 13 views
45

Come ottengo la struttura della tabella temporanea, quindi eliminare la tabella temporanea. C'è uno sp_helptext per le tabelle temporanee? Finalmente è possibile eliminare la tabella temporanea nella stessa sessione o finestra di query?

Esempio:Ottenere la struttura della tabella temporanea (come generare script sql) e deselezionare la tabella temporanea per l'istanza corrente

select * 
into #myTempTable -- creates a new temp table 
from tMyTable -- some table in your database 

tempdb..sp_help #myTempTable 

Reference.

+0

Uso CTE in SQL Server sembra di eliminare la tabella temporanea automaticamente: https://technet.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx?f=255&MSPPError = -2147217396 – RetroCoder

risposta

78

è necessario utilizzare le virgolette attorno al nome di tabella temporanea e si può eliminare la tabella temporanea direttamente dopo l'uso drop table ....

select * 
into #myTempTable -- creates a new temp table 
from tMyTable -- some table in your database 

exec tempdb..sp_help '#myTempTable' 

drop table #myTempTable 
+5

Potrei aggiungere che questa soluzione è un po 'eccessivo sulle risorse di sistema. Se è necessaria solo la struttura della tabella, aggiungi un "WHERE 0 = 1" alla fine della selezione. – pkExec

+0

C'è una ragione per cui questa sp richiede così tanto tempo? – Sal

9

Finché so che non esiste SP_HelpText per le tabelle. Prova questo:

Select * From tempdb.sys.columns Where object_id=OBJECT_ID('tempdb.dbo.#myTempTable'); 
3

exec sp_columns nome_tabella;

esempio

exec sp_columns dipendenti;

1
Select * From tempdb.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '#yourtemp%' 
1

avevo bisogno di essere in grado di ricreare una tabella temporanea in uno script, quindi ho usato questo codice genera la parte colonne dell'istruzione CREATE TABLE:

SELECT char(9) + '[' + c.column_name + '] ' + c.data_type 
    + CASE WHEN c.data_type IN ('decimal') 
     THEN isnull('(' + convert(varchar, c.numeric_precision) + ', ' + convert(varchar, c.numeric_scale) + ')', '') 
     ELSE '' END 
    + CASE WHEN c.IS_NULLABLE = 'YES' THEN ' NULL' ELSE '' END 
    + ',' 
From tempdb.INFORMATION_SCHEMA.COLUMNS c 
WHERE TABLE_NAME LIKE '#myTempTable%' 

Non ho prove per tutti sql datatypes, ma questo ha funzionato per int, float, datetime, money e bit.

Inoltre - ApexSQL Complete (gratuito) ha una funzione utile in cui è possibile esportare i risultati della griglia in una dichiarazione Insert Into. L'ho usato per caricare questa tabella temporanea creata nel mio script. ApexSQL Copy Results As Insert into statement

Problemi correlati