【问题标题】:How to use T-SQL MERGE in this case?在这种情况下如何使用 T-SQL MERGE?
【发布时间】:2011-02-27 09:57:06
【问题描述】:

我是 T-SQL 命令MERGE 的新手,所以我在我的 SQL 逻辑中找到了一个可以使用它的地方,并想对其进行测试,但不知道我应该如何使用它:

IF (EXISTS (SELECT 1 FROM commissions_history WHERE request = @requestID))
    UPDATE commissions_history
    SET amount = @amount
    WHERE request = @requestID
ELSE
    INSERT INTO commissions_history (amount) VALUES @amount)

请建议正确的用法。谢谢!

【问题讨论】:

    标签: sql tsql merge sql-server-2008-r2


    【解决方案1】:

    我希望它会起作用

    MERGE commissions_history AS target
    USING (SELECT request FROM  commissions_history WHERE request = @requestID) AS source (request)
    ON (target.request = source.request)
    WHEN MATCHED THEN 
        UPDATE SET amount = @amount
    WHEN NOT MATCHED BY SOURCE    
        INSERT (request, amount)
        VALUES (@requestID,  @amount)
    

    【讨论】:

    • 插入部分不起作用,因为您的源选择将返回一个空记录集,然后它将尝试合并
    • 在更新中,source.amount 来自可表commisions_history,但需要来自变量@Amount。
    • @Tom H、@Shannon Severance:感谢 cmets。我已经改变了它。不管怎样,Tom H 的更清楚。
    【解决方案2】:

    您查看帮助了吗?这是一个简单的例子:

    MERGE dbo.commissions_history AS target
    USING (SELECT @amount, @requestID) AS source (amount, request)
    ON (target.request = source.request)
    WHEN MATCHED THEN
        UPDATE SET amount = source.amount
    WHEN NOT MATCHED THEN
        INSERT (request, amount)
        VALUES (source.request, source.amount);
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2022-01-23
    • 2015-11-30
    • 2017-05-16
    • 2012-10-06
    • 2011-05-18
    • 2019-11-29
    相关资源
    最近更新 更多