2013-08-27 5 views
0

Я хочу использовать выходное значение одной хранимой процедуры в другой хранимой процедуре.Pass Output Значение одной хранимой процедуры для другой хранимой процедуры

Хранимая процедура 1:

Create PROCEDURE [dbo].[usp_AddUpdateUser]  
    @UserId INT, 
    @Email varchar(50), 
    @FirstName varchar(50) 
AS  
BEGIN 
    MERGE [User] AS target 
    USING (SELECT @UserId) AS source (Id) 
    ON target.Id = source.Id 

    WHEN MATCHED THEN 
     UPDATE 
      SET Email = @Email, 
       FirstName = @FirstName 

    WHEN NOT MATCHED THEN 
     INSERT (Email, FirstName) 
     VALUES (@Email, @FirstName) 

    OUTPUT inserted.Id; 
    END 

Теперь я хочу использовать вставленную идентификатор выше хранимой процедуры ниже хранимой процедуры:

ALTER PROCEDURE usp_AddUpdateDealer 
    (@Id INT, 
    @DealerName varchar(55), 
    @Email varchar(55), 
    @UserId INT) 
AS  
BEGIN 
    DECLARE @NewUserId INT 

    EXEC @NewUserId = usp_AddUpdateUser @UserId, @Email, @DealerName 

    MERGE Dealer AS target 
    USING (SELECT @Id) AS source (Id) ON target.Id = source.Id 

    WHEN MATCHED THEN 
     UPDATE 
      SET @DealerName = @DealerName, 
       Email = @Email, 
       UserId = @NewUserId 

    WHEN NOT MATCHED THEN 
     INSERT (DealerName, Email, UserId) 
     VALUES (@DealerName, @Email, @NewUserId) 

    OUTPUT inserted.Id; 
END 

@NewUserId не дает выходное значение.

Как я могу получить опцию вывода хранимой процедуры usp_AddUpdateUser, чтобы использовать ее в следующей инструкции?

ответ

1
ALTER PROCEDURE usp_AddUpdateDealer 
    (  
     @Id INT, 
     @DealerName varchar(55), 
     @Email varchar(55), 
     @UserId INT 
    ) 
    AS  
    BEGIN 
    DECLARE @t table(NewUserId INT) 
    INSERT @t(NewUserId) 
    EXEC @NewUserId = usp_AddUpdateUser @UserId,@Email,@DealerName 

    DECLARE @NewUserId INT 
    SELECT @NewUserId = NewUserId FROM @t 

    MERGE Dealer AS target 
    USING (SELECT @Id) AS source (Id) 
    ON target.Id = source.Id 
    WHEN MATCHED THEN 
    UPDATE 
     SET @DealerName = @DealerName, 
      Email = @Email, 
      [email protected] 
      WHEN NOT MATCHED THEN 
      INSERT (DealerName,Email,UserId) 
      VALUES (@DealerName,@Email,@NewUserId) 
     OUTPUT inserted.Id; 
    END 
Смежные вопросы