SQL表 - 从表复制到表

时间:2017-05-25 08:53:34

标签: sql sql-server database

我在同一个数据库中有两个彼此相同的表,一个是临时的'持有'上传数据的表格,另一个是存储永久数据的实时数据表。

这样做的原因是两个表相互比较,以查看最初的值和新更新的值的变化。

我的问题是,一旦比较阶段完成并且用户提交上传,我如何将数据从临时表复制到现有表格,在那里它将插入一个新记录,在该表格中不存在现有表格,如果它已经存在于永久表格中(使用MonthIDyearID),那么它应该只有UPDATE,因此没有任何重复项。< / p>

所以我希望通过查看另一个表中是否已存在YearIDMonthID来检查记录是否存在。请记住,两个表都是相同的。

以下是一些示例数据:

表1

SpendID Spend    MonthNo YearID  ChangedBy
47      1444.19     2       4       12

表2

SpendID Spend    MonthNo YearID  ChangedBy      
1       1500.54     2       4       12

抱歉,希望这是有道理的。

我已尝试查看UPDATEMERGE,但它们似乎使用了我无法在此处使用的主要识别码。

因为我一直在努力,只需要一个外界的意见来帮助解决这个问题。

2 个答案:

答案 0 :(得分:2)

您可以使用以下命令进行SQLITE:delete-delete,insert,select !!!

答案 1 :(得分:0)

您可以使用MERGEINSERT + UPDATE组合执行此操作。我更喜欢后者。

-- Add missing records
INSERT INTO [Table 1] (SpendID, Spend, MonthNo, YearID, ChangedBy)
SELECT
    SpendID
    , Spend
    , MonthNo
    , YearID
    , ChangedBy
FROM [Table 2] t2
WHERE NOT EXISTS (SELECT 1 
                  FROM [Table 1] t1 
                  WHERE t1.MonthNo = t2.MonthNo 
                      AND t1.YearID = t2.YearID)

-- Update existing records
UPDATE t1
    SET t1.Spend = t2.Spend
FROM [Table 1] t1
    INNER JOIN [Table 2] t2 
        ON t1.MonthNo = t2.MonthNo
            AND t1.YearID = t2.YearID

我之所以比MERGE更喜欢这个原因,是因为MERGE可能会在某些情况下导致性能问题。网上有很多文章,但我发布了a link to an article that exposes one problem with MERGE,还提供了一些与MERGE报告问题的Connect项目at the bottom of the article