Existe-t-il un moyen d'exécuter une procédure stockée dans Management Studio pour récupérer les types de données des ensembles de résultats? Je suis à la recherche de quelque chose comme la fonctionnalité de lorsque vous passez un nom de table à sp_helpComment indiquer les types de données après l'exécution d'une procédure stockée?
Répondre
Aucun moyen facile ne vient à l'esprit sans analyser syscomments pour voir ce qu'il interroge d'où. Si vous pouvez modifier le SP pour sélectionner XML, vous pouvez ajouter XML_INFO à la requête pour récupérer le schéma.
Vous pouvez cependant regarder les types, si vous appelez la procédure stockée via ADO, ADO.NET, ODBC ou les goûts: Les jeux d'enregistrements résultants ont l'information de type que vous recherchez. Êtes-vous vraiment limité à Management Studio?
Vous pouvez toujours utiliser une table réelle qui est garrenteed pour être unique. C'est un kludge, mais c'est une option. Cela ne fonctionnera pas dans un proc stocké cependant.
if exists (select * from sys.tables where name = 'tmp_TableName')
drop table tmp_TableName
go
select * into tmp_TableName from MyTable
--do some stuff
go
if exists (select * from sys.tables where name = 'tmp_TableName')
drop table tmp_TableName
go
En fait, vous pouvez le faire à partir d'un SP:
EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
EXEC ('select * into tmp_TableName from MyTable')
-- Grab the column types from INFORMATION_SCHEMA here
EXEC ('if exists (select * from sys.tables where name = ''tmp_TableName'') drop table tmp_TableName')
Bien, je pense qu'il doit y avoir une meilleure façon.
Ce n'est pas la solution la plus élégante, mais vous pouvez utiliser OPENROWSET pour placer les résultats du proc stocké dans une table, puis utiliser sp_help pour obtenir une description de celui-ci.
par exemple
select * into tmp_Results
from openrowset('SQLOLEDB.1'
, 'Server=your_server_name;Trusted_Connection=yes;'
, 'exec your_stored_proc')
exec sp_help 'tmp_Results'
drop table tmp_Results
Votre meilleur pari serait de changer la procédure stockée à une fonction. Mais cela ne fonctionne que si votre environnement le permet.