2008-10-17 6 views

Répondre

29

Si vous ne pouvez pas modifier la procédure stockée, une autre solution serait de définir une table temporaire et insérer les résultats dans ce

DECLARE @Output VARCHAR(100) 

CREATE TABLE #tmpTable 
(
    OutputValue VARCHAR(100) 
) 
INSERT INTO #tmpTable (OutputValue) 
EXEC dbo.sp_name 9999, 99989999, 'A', 'S', null 

SELECT 
    @Output = OutputValue 
FROM 
    #tmpTable 

DROP TABLE #tmpTable 
+0

Serait très pratique (si vous aviez des permissions) pour le configurer comme votre propre proc stocké avec plus de valeur. Les chances sont que vous allez vouloir appeler cela plusieurs fois. – brianb

+0

Cela ne semble pas fonctionner pour moi dans T-SQL SQL2005. Mon sp renvoie un int. J'ai créé la table de temp, n'obtiens aucune erreur de syntaxe et s'exécute, mais alors l'int dans la table de temp n'a aucune valeur. La solution fournie par DiGi [sur cette page] a fonctionné pour moi. thx – raddevus

+0

J'ai vérifié cela sur SQL Server 2008 R2. Son bon fonctionnement – Shanaka

19

Si la procédure stockée renvoie une valeur unique, vous pouvez définir l'un des paramètres de la procédure stockée à une variable de sortie, puis la procédure stockée définissez la valeur du paramètre

CREATE PROCEDURE dbo.sp_Name 
    @In INT, 
    @Out VARCHAR(100) OUTPUT 

AS 
BEGIN 
    SELECT @Out = 'Test' 
END 
GO 

Et puis, vous obtenez la valeur de sortie comme suit

DECLARE @OUT VARCHAR(100) 
EXEC sp_name 1, @Out OUTPUT 
PRINT @Out 
+0

le problème est que je ne peux pas changer le code de la procédure ... – Bruno

15
DECLARE 
    @out INT 

EXEC @out = sp_name 'param', 2, ... 

Plus d'info dans T-SQL "Execute" help (aide est de MSSQL 2008, mais cela fonctionne en 2000 aussi)

+0

Cela ne fonctionne que pour les procédures qui ont des paramètres OUT. Pas lorsque la procédure renvoie une valeur scalaire (ce qui est le cas pour la question initiale.) – Bill

+0

Travaux sans sortie en 2012 au moins, non testés pour 2008 – JBone

Questions connexes