2011-12-23 2 views
1

Cela semble être une question simple mais je n'ai pas encore trouvé de réponse.Récupère la valeur de la procédure stockée SQL Server dans la variable

J'ai la procédure stockée suivante

CREATE PROCEDURE [dbo].[AllocateId] 
AS 
    BEGIN TRANSACTION 

    UPDATE TOP(1) IdReservation 
    SET IsAllocated = 1 
    OUTPUT DELETED.Id 
    WHERE IsAllocated = 0 

    COMMIT TRANSACTION 
    GO 

Il a été utilisé en C# + code EF sans problème via ExecuteFunction de ObjectContext

ObjectResult<int> objectResult = ExecuteFunction<int>("AllocateId"); 

Cependant lorsque je tente de l'appeler directement à partir du script SQL cela ne semble pas fonctionner

declare @Id int 
EXEC @Id = [dbo].[AllocateId] 

@Id est toujours 0. Comment puis-je obtenir la valeur dans la variable @Id dans le script SQL?

Répondre

6

La valeur de retour de procédure est différente de l'ensemble de résultats renvoyé par cette procédure. Votre procédure stockée renvoie un ensemble de résultats et ne renvoie pas une valeur de retour (qui finit par être null, qui est convertie en 0 implicitement en quittant la procédure).
Pour obtenir le resultset votre retour précis ou chiffré procédure existante, vous devez insert ... exec:

declare @t table (id int); 

insert into @t 
exec [dbo].[AllocateId]; 

Si vous souhaitez retourner une valeur en tant que valeur de retour aussi bien, vous devez vous modifier la procédure stockée:

CREATE PROCEDURE [dbo].[AllocateId] 
AS 
BEGIN TRANSACTION 

declare @id int; 

UPDATE TOP(1) IdReservation 
    SET @id = Id, IsAllocated = 1 
    OUTPUT DELETED.Id 
    WHERE IsAllocated = 0 

COMMIT TRANSACTION 

return @id; 

Ensuite, il fonctionnera de la manière que vous décrivez dans la question.

+0

J'ai remarqué après avoir commenté. Ce n'est pas clair cependant, sauf pour votre commentaire qui le rend beaucoup plus clair :) – MatBailie

Questions connexes