gpt4 book ai didi

sql - upsert sql查询

转载 作者:行者123 更新时间:2023-12-04 03:12:55 25 4
gpt4 key购买 nike

我正在寻找一些有关如何优化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合并以检查是否存在该UserId的数据,然后进行更新,否则插入新行。
有人可以帮我这个忙吗?
谢谢大家,节日快乐,Laziale

最佳答案

MERGE Statement?

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

关于sql - upsert sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com