2012-01-23 21 views
45

¿Cómo obtengo la estructura de la tabla temporal y luego borro la tabla temporal? ¿Hay un sp_helptext para tablas temporales? Finalmente, ¿es posible eliminar la tabla temporal en la misma sesión o ventana de consulta?

Ejemplo:Obtiene la estructura de la tabla temporal (como generar secuencia de comandos sql) y borra la tabla temporal para la instancia actual

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

tempdb..sp_help #myTempTable 

Reference.

+0

Uso de CTE en SQL Server parece dejar caer la tabla temporal de forma automática: https://technet.microsoft.com/en-us/library/ms190766%28v=sql.105%29.aspx?f=255&MSPPError = -2147217396 – RetroCoder

Respuesta

78

Es necesario utilizar comillas alrededor del nombre de tabla temporal y se puede eliminar la tabla temporal directamente después de usar 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

Debo añadir que esta solución es un poco exagerada en los recursos del sistema. Si solo se necesita la estructura de la tabla, agregue un "DONDE 0 = 1" al final de la selección. – pkExec

+0

¿Hay alguna razón por la cual esta sp tome tanto tiempo? – Sal

9

Mientras sepa, no hay SP_HelpText para las tablas. Prueba esto:

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

exec sp_columns table_name;

ejemplo

empleados sp_columns exec;

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

que tenía que ser capaz de volver a crear una tabla temporal en una secuencia de comandos, por lo que utiliza este código genera la parte columnas de la sentencia 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%' 

No he probado para todos tipos de datos sql, pero esto funcionó para int, float, datetime, money y bit.

También - ApexSQL Complete (gratis) tiene una buena característica donde puede exportar los resultados de la grilla en una declaración Insert Into. Lo usé para cargar esta tabla temporal creada en mi script. ApexSQL Copy Results As Insert into statement

Cuestiones relacionadas