upsert sql查询

前端之家收集整理的这篇文章主要介绍了upsert sql查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一些建议如何优化几个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),@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检查是否已经存在UserId的数据而不是update,否则插入一个新行.
有人可以帮我这个吗
感谢和节日快乐大家,Laziale

解决方法

MERGE Statement?
CREATE PROCEDURE [dbo].[MERGEStep1](@UserId 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,Title_Position=@TitlePosition  
WHEN NOT MATCHED THEN
  INSERT (UserId,Title_Position)
  VALUES(@UserId,@TitlePosition);
END

猜你在找的MsSQL相关文章