我正在寻找一些如何优化耦合sql存储过程的建议。 第一个查询我正在插入,而第二个我正在进行更新,如果数据存在。 我想要做的是将两个存储过程合并为一个,其中查询将检查数据是否存在而不是更新,否则插入新行。 这是我现在所拥有的:
更新SP:
ALTER PROCEDURE [dbo].[UpdateStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50),
@TitlePosition nvarchar(30))
AS
BEGIN
UPDATE Company_Information
SET First_Name = @First_Name,
Last_Name = @Last_Name,
Title_Position=@TitlePosition,
WHERE UserId = @UserId
END
插入SP:
ALTER PROCEDURE [dbo].[InsertStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50),
@TitlePosition nvarchar(30))
AS
BEGIN
INSERT INTO Company_Information(UserId,
First_Name,
Last_Name,
Title_Position)
VALUES
(@UserId,
@First_Name,
@Last_Name,
@TitlePosition)
END
所以,我想将两个SP合并为一个SP,并检查SP是否已存在该UserId的数据而不是更新,否则插入一个新行。 有人可以帮我这个。 谢谢,祝大家节日快乐,Laziale
答案 0 :(得分:18)
CREATE PROCEDURE [dbo].[MERGEStep1](@UserId nvarchar(50), @First_Name nvarchar(50), @Last_Name nvarchar(50), @TitlePosition nvarchar(30))
AS
BEGIN
MERGE Company_Information WITH(HOLDLOCK) AS T
USING(SELECT 1 S) S
ON T.UserId = @UserId
WHEN MATCHED THEN UPDATE SET
First_Name = @First_Name,
Last_Name = @Last_Name,
Title_Position=@TitlePosition
WHEN NOT MATCHED THEN
INSERT (UserId, First_Name, Last_Name, Title_Position)
VALUES(@UserId, @First_Name,@Last_Name,@TitlePosition);
END
答案 1 :(得分:-1)
请按照以下步骤操作:
正如@gbn指定的那样,请注意concurrence issues。