Souvent, je dois écrire quelque chose comme ce qui suit lorsque je traite avec SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Mais créer une table dont la syntaxe exacte résulte d'une procédure stockée est une tâche fastidieuse. Par exemple, le résultat de sp_helppublication contient 48 colonnes! Je veux savoir s'il existe un moyen facile de le faire.
Merci.
sql-server
t-sql
stored-procedures
Juste un apprenant
la source
la source
Réponses:
Si la procédure ne fait que renvoyer un ensemble de résultats et que l' option de requêtes distribuées ad hoc est activée.
Ou vous pouvez configurer un serveur lié en boucle et l'utiliser à la place.
la source
SET FMT_ONLY ON
?Dans SQL Server 2012 et versions ultérieures, vous pouvez utiliser
sys.dm_exec_describe_first_result_set
localement, en supposant que le résultat que vous voulez obtenir est le premier résultat:Résultat:
Notez qu'il existe une limitation: si votre procédure stockée crée des tables #temp, la fonctionnalité de métadonnées ne fonctionne pas. C'est pourquoi je n'ai pas utilisé sp_who2. :-)
la source
SELECT @sql += *expression*
syntaxe est-elle documentée quelque part? faut-ORDER BY
il inclure pour le rendre stable?ORDER BY
est effectivement connu pour rendre cela moins stable . Si vous voulez que les résultats dans un ordre prévisible, utiliserFOR XML PATH
ou, si une nouvelle version assez de SQL Server,STRING_AGG
.+=
... la chaîne+=
est documentée ici . Mais merci!Non. Le résultat d'une procédure stockée peut varier énormément: il n'est pas conçu pour toujours renvoyer exactement un jeu de résultats, comme un SELECT, sur un objet.
Vous devez exécuter CREATE TABLE
la source
Je voudrais écrire une procédure pour générer la table pour moi:
Puis appelez-le avec:
Remarque : remplacez 'YOUR_PROCEDURE_NAME_HERE' par le nom de votre propre procédure stockée.
Remarque : remplacez YOUR_TABLE_NAME_HERE par le nom de la table de votre choix.
Ce qui précède générera quelque chose comme ceci:
la source