加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

upsert sql查询

发布时间:2020-12-12 07:48:40 所属栏目:MsSql教程 来源:网络整理
导读:我正在寻找一些建议如何优化几个sql存储过程. 使用第一个查询我做插入,与第二个我正在更新,如果数据存在. 我想做的是将两个存储过程合并在一起,其中查询将检查数据是否存在而不是更新,否则插入新行. 这是我现在在这里 更新SP: ALTER PROCEDURE [dbo].[Update
我正在寻找一些建议如何优化几个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读