2017-01-20 2 views
2

У меня есть сохраненная процедура, которая сначала проверяет, существует ли запись, и если она обновляет ее, а затем возвращает идентификатор строки, если она не вставляет новую запись, а затем возвращает идентификатор строки.Сохраненный Proc возвращает 2 значения возврата

При выполнении хранимой процедуры я получаю 2 значения возврата, одно с полем «@PersonID», а другое с «Возвращаемое значение». Я уверен, что это происходит из-за инструкции SELECT, которая используется в IF EXISTS, однако я не могу понять способ ее подавить, и я надеялся, что кто-то сможет помочь.

ALTER PROCEDURE [dbo].[InsertPerson] 
    -- Add the parameters for the stored procedure here 
    @FirstName nvarchar(50), 
    @LastName nvarchar(50), 
    @PersonID int OUT 
AS 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    IF(EXISTS (SELECT PersonID FROM People 
       WHERE FirstName = @FirstName AND LastName = @LastName)) 
    BEGIN 

     SET @PersonID = (SELECT PersonID 
       FROM People 
       WHERE FirstName = @FirstName 
         AND LastName = @LastName) 

     UPDATE People 
     SET 
     FirstName = @FirstName, 
     LastName = @LastName 
     WHERE PersonID = @PersonID 
    END 
    ELSE 

    BEGIN 

    INSERT INTO People (FirstName, LastName) VALUES(@FirstName, @LastName) 
    SET @PersonID = SCOPE_IDENTITY() 
    SELECT @PersonID 
END 
+3

Вы объявили выходной параметр, а также выбор значения - конечно, вам нужно только один или другие ... – Bridge

+4

удалить 'Select @ PersonID' .. процедура имеет выходной параметр @PersonID, и вы уже устанавливаете его. –

+7

Каждая хранимая процедура ВСЕГДА возвращает значение в Return_Value как int. Он предназначен для указания статуса выполнения. –

ответ

0

Благодарим за ответы. Я случайно отправил неверный код, у фактической сохраненной процедуры не было SELECT @PersonID в конце. Однако, я думаю, что я неправильно идентифицировал хранимую процедуру как основную причину проблемы, над которой я работаю, и, как указано в ответах, все работает должным образом. снова

Спасибо за помощь

Смежные вопросы