Respuestas:
Siempre uso el valor de retorno para devolver el estado de error. Si necesita devolver un valor, usaría un parámetro de salida.
ejemplo de procedimiento almacenado, con un parámetro de SALIDA:
CREATE PROCEDURE YourStoredProcedure
(
@Param1 int
,@Param2 varchar(5)
,@Param3 datetime OUTPUT
)
AS
IF ISNULL(@Param1,0)>5
BEGIN
SET @Param3=GETDATE()
END
ELSE
BEGIN
SET @Param3='1/1/2010'
END
RETURN 0
GO
llamada al procedimiento almacenado, con un parámetro OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
SALIDA:
0
2010-01-01 00:00:00.000
Esto funcionará si simplemente desea devolver un número entero:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
fue solo un ejemplo, RETURN
está diseñado para funcionar solo con valores enteros, consulte los documentos . La forma recomendada de obtener otros datos de un SP es devolver un conjunto de resultados o usarOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
De la documentación (asumiendo que usa SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Entonces sí, debería funcionar de esa manera.
Tenía la misma pregunta. Si bien aquí hay buenas respuestas, decidí crear una función con valores de tabla. Con una función con valor de tabla (o escalar), no tiene que cambiar su proceso almacenado. Simplemente hice una selección de la función con valores de tabla. Tenga en cuenta que el parámetro (MyParameter es opcional).
CREATE FUNCTION [dbo].[MyDateFunction]
(@MyParameter varchar(max))
RETURNS TABLE
AS
RETURN
(
--- Query your table or view or whatever and select the results.
SELECT DateValue FROM MyTable WHERE ID = @MyParameter;
)
Para asignar a su variable, simplemente puede hacer algo como:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
También puede utilizar una función con valores escalares:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Entonces puedes simplemente hacer
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;