首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >upsert sql查询

upsert sql查询
EN

Stack Overflow用户
提问于 2012-01-02 21:39:19
回答 2查看 5.9K关注 0票数 10

我正在寻找一些建议,如何优化组合sql存储过程。对于第一个查询,我执行insert,对于第二个查询,如果数据存在,我将执行update。我想要做的是将两个存储过程合并为一个,查询将检查数据是否存在而不是update,否则插入一个新行。这是我目前所拥有的:

更新SP:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-02 21:42:17

MERGE Statement?

代码语言:javascript
复制
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
票数 18
EN

Stack Overflow用户

发布于 2012-01-02 21:43:53

请按照以下步骤操作:

  1. 创建变量以对其进行测试(例如:@id )
  2. 选择@id = UserId from Company_Information where UserId = @UserId
  3. If @id= @userId
  4. ,否则插入

正如@gbn所指定的,请注意concurrence issues

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8701509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档