Réponses:
J'utilise toujours la valeur de retour pour renvoyer le statut d'erreur. Si vous avez besoin de renvoyer une valeur, j'utiliserais un paramètre de sortie.
exemple de procédure stockée, avec un paramètre 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
appel à la procédure stockée, avec un paramètre OUTPUT:
DECLARE @OutputParameter datetime
,@ReturnValue int
EXEC @ReturnValue=YourStoredProcedure 1,null, @OutputParameter OUTPUT
PRINT @ReturnValue
PRINT CONVERT(char(23),@OutputParameter ,121)
PRODUCTION:
0
2010-01-01 00:00:00.000
Cela fonctionnera si vous souhaitez simplement renvoyer un entier:
DECLARE @ResultForPos INT
EXEC @ResultForPos = storedprocedureName 'InputParameter'
SELECT @ResultForPos
UNIQUEIDENTIFIER
.
UNIQUEIDENTIFIER
n'était qu'un exemple, RETURN
est conçu pour fonctionner uniquement avec des valeurs entières, voir la documentation . La méthode recommandée pour obtenir d'autres données d'un SP est de retourner un jeu de résultats ou d'utiliserOUTPUT
declare @EventId int
CREATE TABLE #EventId (EventId int)
insert into #EventId exec rptInputEventId
set @EventId = (select * from #EventId)
drop table #EventId
À partir de la documentation (en supposant que vous utilisez SQL-Server):
USE AdventureWorks;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
Alors oui, cela devrait fonctionner de cette façon.
J'avais la même question. Bien qu'il y ait de bonnes réponses ici, j'ai décidé de créer une fonction table. Avec une fonction table (ou scalaire), vous n'avez pas à modifier votre proc stocké. J'ai simplement fait une sélection à partir de la fonction table. Notez que le paramètre (MyParameter est facultatif).
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;
)
Pour affecter à votre variable, vous pouvez simplement faire quelque chose comme:
Declare @MyDate datetime;
SET @MyDate = (SELECT DateValue FROM MyDateFunction(@MyParameter));
Vous pouvez également utiliser une fonction à valeur scalaire:
CREATE FUNCTION TestDateFunction()
RETURNS datetime
BEGIN
RETURN (SELECT GetDate());
END
Ensuite, vous pouvez simplement faire
Declare @MyDate datetime;
SET @MyDate = (Select dbo.TestDateFunction());
SELECT @MyDate;