2008-10-17 13 views
13

Tengo un procedimiento almacenado que devuelve una sola línea y la columna con un texto, tengo que configurar este texto a una variable, algo así como:Establecer un valor de retorno SP a una variable de SQL Server

declare @bla varchar(100) 
select @bla = sp_Name 9999, 99989999, 'A', 'S', null 

pero por supuesto, este código no funciona ...

gracias!

Respuesta

29

Si no puede cambiar el procedimiento almacenado, otra solución sería definir una tabla temporal, e insertar los resultados en esa

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

Sería muy útil (si tuviera permisos) configurar esto como su propio proceso almacenado con más valor. Lo más probable es que quieras llamar esto varias veces. – brianb

+0

Esto no pareció funcionar para mí en T-SQL SQL2005. Mi sp devuelve un int. Creé la tabla temporal, no obtuve errores de sintaxis y se ejecuta, pero luego el int en la tabla temporal no tiene ningún valor. La solución provista por DiGi [en esta página] funcionó para mí. thx – raddevus

+0

Lo comprobé en SQL Server 2008 R2. Funciona bien – Shanaka

19

Si el procedimiento almacenado devuelve un solo valor se podría definir uno de los parámetros en el procedimiento almacenado para ser una variable de salida, y luego el procedimiento almacenado podría establecer el valor del parámetro

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

AS 
BEGIN 
    SELECT @Out = 'Test' 
END 
GO 

Y a continuación, se obtiene el valor de salida de la siguiente manera

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

el problema es que no puedo cambiar el código del procedimiento ... – Bruno

15
DECLARE 
    @out INT 

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

Más información en T-SQL "EJECUTAR" help (Ayuda es de MSSQL 2008, pero esto funciona en el año 2000 también)

+0

Esto solo funciona para procedimientos que tienen parámetros OUT. No cuando el procedimiento arroja un valor escalar (que es el caso de la pregunta original). – Bill

+0

Funciona sin salirse al menos en 2012, no se ha probado en 2008. – JBone

Cuestiones relacionadas