2008-08-28 18 views

Répondre

0

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.

1

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?

-1

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 
0

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.

0

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 
1

Votre meilleur pari serait de changer la procédure stockée à une fonction. Mais cela ne fonctionne que si votre environnement le permet.