我有一个存储过程,首先检查是否存在条目,如果是,则更新它然后返回行ID,如果不是,则插入新记录然后返回行ID。
执行存储过程时,我会得到2个返回值,一个带有“@PersonID”字段,另一个带有“返回值”。我很确定这种情况正在发生,因为在IF EXISTS中使用了SELECT语句,但是,我无法想出一种方法来抑制它,我希望有人可以提供帮助。
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
答案 0 :(得分:0)
感谢您的快速回复。我意外地发布了一些不正确的代码,实际存储的proc在最后没有SELECT @PersonID。但是,我认为我错误地将存储过程确定为我正在处理的问题的根本原因,并且在响应中指出一切都按预期工作。
再次感谢您的帮助