PROBLEMA: Alguna vez hemos regresado valores desde un procedimiento
almacenado, regularmente lo utilizamos para devolver un conjunto de datos a
través de la cláusula SELECT, pero
sabíamos que existe la
clausula OUTPUT para devolver
valores también?
SOLUCION: Sinceramente yo uso los procedimientos
almacenados para devolver un conjunto de datos con mayor frecuencia que un solo
valor, por lo tanto casi no uso esta cláusula pero es bueno que sepamos que
existen otras opciones.
Algunas características?
- Es posible devolver casi cualquier tipo, a excepción de TEXT, NTEXT, IMAGE, tipo de dato TABLA
- Puedes utilizar las palabras reservadas OUT|OUTPUT
Algunos ejemplos de su
funcionamiento?
USE AdventureWorks2014; GO CREATE PROCEDURE dbo.ProcedimientoOutput @paramEntrada VARCHAR(20) , @paramSalidaDatetime DATETIME OUT , @paramSalidaINT INT OUTPUT , @paramSalidaDECIMAL DECIMAL(5,2) OUT , @paramSalidaMoney MONEY OUTPUT , @paramSalidaUI UNIQUEIDENTIFIER OUT AS SET NOCOUNT ON; PRINT @paramEntrada; SET @paramSalidaDatetime = GETDATE() SET @paramSalidaINT = 1234567 SET @paramSalidaDECIMAL = 123.45 SET @paramSalidaMoney = 12345.678 SET @paramSalidaUI = NEWID() GO
--Declaramos las variables que se utilizarán para recibir los valores de salida DECLARE @salidaDatetime DATETIME; DECLARE @salidaINT INT; DECLARE @salidaDecimal DECIMAL(5,2); DECLARE @salidaMoney MONEY; DECLARE @salidaUI UNIQUEIDENTIFIER; EXEC dbo.ProcedimientoOutput 'ENTRADA' , @salidaDateTime OUT, @salidaINT OUT, @salidaDecimal OUT, @salidaMoney OUT, @salidaUI OUT; SELECT @salidaDatetime, @salidaDatetime, @salidaINT, @salidaDecimal, @salidaMoney, @salidaUI ;
Ahora bien, si
queremos devolver un tipo CURSOR también lo podemos hacer, ya que no podemos
devolver un tipo de dato TABLA:
USE AdventureWorks2014; GO CREATE PROCEDURE dbo.ProcedimientoOutputCursor @paramEntrada VARCHAR(20) , @paramCursor CURSOR VARYING OUTPUT AS SET NOCOUNT ON; PRINT @paramEntrada; SET @paramCursor = CURSOR FOR SELECT ROW_NUMBER() OVER( ORDER BY CurrencyCode ) AS rn, CurrencyCode, Name FROM Sales.Currency; OPEN @paramCursor; GO
DECLARE @cursor CURSOR; EXEC dbo.ProcedimientoOutputCursor 'ENTRADA' , @cursor OUTPUT; WHILE (@@FETCH_STATUS = 0) BEGIN; FETCH NEXT FROM @cursor; END; CLOSE @cursor; DEALLOCATE @cursor; GO
Cualquier duda, ya saben como contactarme ;)
SALUDOS!
COMPARTE ESTA INFORMACION SI TE PARECIO INTERESANTE
0 comentarios:
Publicar un comentario