Risposte:
Uso sempre il valore di ritorno per restituire lo stato di errore. Se è necessario restituire un valore, utilizzare un parametro di output.
procedura memorizzata di esempio, con un parametro 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
chiamata alla stored procedure, con un parametro OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
PRODUZIONE:
0
2010-01-01 00:00:00.000
Funzionerà se desideri restituire semplicemente un numero intero:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
era solo un esempio, RETURN
è progettato per funzionare solo con valori interi, vedere la documentazione . Il modo consigliato per ottenere altri dati da un SP è restituire un set di risultati o utilizzareOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
Dalla documentazione (supponendo che utilizzi SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Quindi sì, dovrebbe funzionare in questo modo.
Ho avuto la stessa domanda. Sebbene ci siano buone risposte qui, ho deciso di creare una funzione con valori di tabella. Con una funzione con valori di tabella (o scalare) non è necessario modificare il processo memorizzato. Ho semplicemente fatto una selezione dalla funzione con valori di tabella. Notare che il parametro (MyParameter è facoltativo).
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;
)
Per assegnare alla tua variabile puoi semplicemente fare qualcosa come:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Puoi anche usare una funzione con valori scalari:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Quindi puoi semplicemente fare
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;