2010-09-07 5 views
1

Je travaille sur un système hérité et j'ai besoin d'appeler une procédure stockée pour récupérer les données dont j'ai besoin. Le problème est que je n'ai aucune idée du format de la colonne de sortie. À moins d'aller dans la procédure stockée et de trouver le format de la colonne de sortie à partir du SQL, y a-t-il un moyen pour moi de voir quels sont les types de colonnes de sortie? Je peux très bien exécuter la procédure stockée, mais le code est un gâchis, et je préférerais le traiter comme une boîte noire si je le pouvais.SQL Server 2005 Déterminer le type de sortie de la procédure stockée

EDIT: Je sais que ce n'est pas possible pour moi de déterminer cela à partir des métadonnées de la base de données, car la procédure peut renvoyer des résultats différents en fonction de ce que l'entrée est. Je suppose que je devrais reformuler ma question: étant donné le jeu de résultats d'une procédure stockée, comment puis-je déterminer les types de colonnes?

+0

Bonne question - malheureusement, sans aucune grande réponse, j'ai peur .... –

Répondre

1

Comme vous le savez déjà, vous ne pouvez pas déterminer ces informations à partir de métadonnées de base de données (car il n'y en a aucune) - et malheureusement, vous ne pouvez pas les déterminer à partir du jeu de résultats - du moins de manière déterministe et fiable. Lorsque vous appelez une procédure stockée, tout ce que vous obtenez est un groupe de colonnes et un tas de lignes. Il n'y a aucune information inhérente disponible sur les types de ces colonnes. Le mieux que vous pouvez faire est de deviner - si les données contiennent des caractères alphanumériques, c'est un champ VARCHAR/chaîne. S'il n'a que des chiffres et éventuellement un séparateur décimal, il est probable qu'il s'agisse d'un INT ou d'un DECIMAL (ou MONEY ou SMALLMONEY - on ne peut pas vraiment le savoir). Si elle ressemble à une DATE et peut être convertie en DATE, c'est probablement une DATE, DATETIME, DATETIME2 ou quelque chose comme ça.

Le seul fiable est d'avoir de la documentation sur les valeurs de sortie générées par la procédure stockée. Tout le reste est au mieux des conjectures.

+0

Je vois. J'espérais qu'il y avait des métadonnées que SQL Server Management Studio laissait de côté. Je suppose qu'il n'y a pas, et je vais devoir plonger dans la source SQL de la procédure stockée pour voir ce que j'ai affaire :(En tout cas, merci pour la réponse claire. – quanticle

0

Qu'allez-vous faire si les sorties proc stockées différentes resultsets en fonction de ce qui est passé dans ... par exemple

create procedure Test 
@var int 
as 
if @var =1 
begin 
select col1,col2 from table1 
end 
else if @var =2 
begin 
select col4,col2 ,col5,col1 from table2 
end 
else 
begin 
select * from table3 
end 

Il y a une options SET mais il est dépréciée

SET FMTONLY ON; 
GO 
exec YourProc 
GO 
SET FMTONLY OFF; 
GO 
+0

Je sais qu'il n'est pas possible de déterminer le jeu de résultats de manière statique, pour exactement cette raison. Je suppose que ce que je veux savoir est, étant donné un jeu de résultats d'une procédure stockée, comment puis-je déterminer les types de colonnes de l'ensemble de résultats? J'ai édité la question clarifier ce point. – quanticle

+0

Où voyez-vous que SET FMTONLY est déprécié? Ce n'est pas indiqué dans BOL n'importe où. –

Questions connexes