Muchas veces necesito escribir algo como lo siguiente cuando trato con SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Pero crear una tabla que tenga la sintaxis exacta como resultado de un procedimiento almacenado es una tarea tediosa. Por ejemplo, ¡el resultado de sp_helppublication tiene 48 columnas! Quiero saber si hay alguna manera fácil de hacer esto.
Gracias.
sql-server
t-sql
stored-procedures
Solo un alumno
fuente
fuente
Respuestas:
Si el procedimiento solo devuelve un conjunto de resultados y la opción de consultas distribuidas ad hoc está habilitada.
O puede configurar un servidor vinculado de bucle invertido y usarlo en su lugar.
fuente
SET FMT_ONLY ON
?En SQL Server 2012 y versiones posteriores, puede usarlo
sys.dm_exec_describe_first_result_set
localmente, suponiendo que el conjunto de resultados que busca es el primer resultado:Resultado:
Tenga en cuenta que hay una limitación: si su procedimiento almacenado crea tablas #temp, la funcionalidad de metadatos no funciona. Es por eso que no usé sp_who2. :-)
fuente
SELECT @sql += *expression*
sintaxis está documentada en alguna parte? ¿DebeORDER BY
incluirse un para que sea estable?ORDER BY
se sabe que hace esto menos estable . Si desea que los resultados en un orden predecible, utilizarFOR XML PATH
o, si en una nueva versión bastante de SQL Server,STRING_AGG
.+=
... la cadena+=
se documenta aquí . ¡Pero gracias!No. El resultado de un procedimiento almacenado puede variar enormemente: no está diseñado para devolver siempre exactamente un conjunto de resultados como un SELECT en algún objeto.
Tienes que ejecutar CREATE TABLE
fuente
Escribiría un procedimiento para generar la tabla para mí:
Luego llámalo con:
Nota : Reemplace 'YOUR_PROCEDURE_NAME_HERE' con el nombre de su propio procedimiento almacenado.
Nota : Reemplace YOUR_TABLE_NAME_HERE con el nombre de la tabla que elija.
Lo anterior generará algo como esto:
fuente