Odpowiedzi:
Zawsze używam wartości zwracanej do przekazywania stanu błędu. Jeśli chcesz przekazać jedną wartość, użyłbym parametru wyjściowego.
przykładowa procedura składowana z parametrem OUTPUT:
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
wywołanie procedury składowanej z parametrem OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
WYNIK:
0
2010-01-01 00:00:00.000
To zadziała, jeśli chcesz po prostu zwrócić liczbę całkowitą:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
był tylko przykładem, RETURN
został zaprojektowany do pracy tylko z wartościami całkowitymi, zobacz dokumentację . Zalecanym sposobem uzyskiwania innych danych z SP jest zwrócenie zestawu wyników lub użycieOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Z dokumentacji (zakładając, że używasz SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Więc tak, to powinno działać w ten sposób.
Miałem to samo pytanie. Chociaż są tutaj dobre odpowiedzi, zdecydowałem się utworzyć funkcję o wartościach tabelarycznych. Dzięki funkcji wartościowanej tabelowo (lub skalarnie) nie musisz zmieniać przechowywanej procedury. Po prostu wybrałem funkcję z wartościami tabelarycznymi. Zwróć uwagę, że parametr (MyParameter jest opcjonalny).
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;
)
Aby przypisać do swojej zmiennej, możesz po prostu zrobić coś takiego:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Możesz również użyć funkcji o wartościach skalarnych:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Wtedy możesz po prostu to zrobić
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;