Antworten:
Ich verwende immer den Rückgabewert, um den Fehlerstatus zurückzugeben. Wenn Sie einen Wert zurückgeben müssen, würde ich einen Ausgabeparameter verwenden.
Beispiel einer gespeicherten Prozedur mit einem OUTPUT-Parameter:
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
Aufruf der gespeicherten Prozedur mit einem OUTPUT-Parameter:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
AUSGABE:
0
2010-01-01 00:00:00.000
Dies funktioniert, wenn Sie einfach eine Ganzzahl zurückgeben möchten:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Aus der Dokumentation (vorausgesetzt, Sie verwenden SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Also ja, es sollte so funktionieren.
Ich hatte die gleiche Frage. Obwohl es hier gute Antworten gibt, habe ich beschlossen, eine Tabellenwertfunktion zu erstellen. Mit einer Tabellen- (oder Skalar-) Wertfunktion müssen Sie Ihren gespeicherten Prozess nicht ändern. Ich habe einfach eine Auswahl aus der Tabellenwertfunktion getroffen. Beachten Sie, dass der Parameter (MyParameter ist optional).
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;
)
Um Ihrer Variablen zuzuweisen, können Sie einfach Folgendes tun:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Sie können auch eine skalarwertige Funktion verwenden:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Dann können Sie einfach tun
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;