Tengo un procedimiento almacenado que devuelve un valor. Lo llamo desde otros procedimientos almacenados que necesitan recuperar este valor. El procedimiento almacenado de llamada está dentro de una transacción, el procedimiento almacenado que devuelve el valor (y realmente crea el valor y lo almacena en una tabla que ningún otro proceso toca) no está dentro de su propia transacción, sino que sería parte de la transacción de la persona que llama.¿Cuál es la mejor manera de asignar el valor devuelto de un proceso almacenado a una variable en SQL?
La pregunta es: ¿cuál es la forma más eficiente de recuperar el valor de retorno del procedimiento almacenado y almacenarlo en una variable en el proceso de llamada?
Actualmente tengo lo siguiente y me pregunto si es muy ineficiente?
DECLARE @tmpNewValue TABLE (newvalue int)
INSERT INTO @tmpNewValue EXEC GetMyValue
DECLARE @localVariable int
SET @localVariable = (SELECT TOP 1 newvalue FROM @tmpNewValue)
¿No hay una manera más directa de hacer esto? ¿No es esta una forma costosa (en términos de rendimiento)?
Mi proc almacenado no tiene un parámetro de salida, simplemente devuelve un valor. ¿Sería más rápido usar un parámetro de salida?
Por lo que vale la pena que estoy usando MS SQL Server 2005
interesante, no sabía que era constructo válido. Entonces el ejemplo que di es crear una tabla temporal. ¿Qué tan ineficiente describirías que era, muy o no sería notable a menos que se llamara decenas de miles de veces? – ApplePieIsGood
difícil de decir, su tabla es una variable de tabla por lo que todo debe estar en la memoria. ¿Por qué no ejecutar una prueba en su sistema para medir la diferencia por los dos? – JoshBerke