【问题标题】:Merging data of two SQL Server tables with auto Increment使用自动增量合并两个 SQL Server 表的数据
【发布时间】:2018-07-18 20:35:12
【问题描述】:

使用 SQL Server,我有两个要合并的表。 Table2 有一个具有 NULL 值的 tbID 列。我希望 NULL 值自动更新,从 tbID 列的下一个值开始,在表合并时从 Table1 开始。

我正在输入这样的内容..

SELECT 
    A.tbID,
    A.etID,
    A.cNumber,
    A.cName
FROM 
    Table1 AS A

UNION ALL

SELECT 
    B.tbID,
    B.etID,
    B.cNumber,
    B.cName
FROM 
    Table2 AS B

在 Table2 的记录中,我的结果有一个 NULL 值(而不是自动插入的数字)。

【问题讨论】:

  • 您的查询只是从两个表中选择记录,当然当有 NULL 时返回 NULL。是否要将 Table2 中的记录插入到 Table1 中?
  • @WolfgangK 是的,但我需要 tbID 列自动递增,从 tbID 列的下一个值开始。例如,Table1 中的最后一行在 tbID 列中的值为 12。我希望 Table2 中的第一行在合并表时的 tbID 列中的值为 13。

标签: sql sql-server merge


【解决方案1】:

如果你只想要一个结果集,你可以使用:

SELECT A.tbID, A.etID, A.cNumber, A.cName
FROM Table1 A
UNION ALL
SELECT (a.maxID + ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) as tbID,
       B.etID, B.cNumber, B.cName
FROM Table2 B CROSS JOIN
     (SELECT MAX(A.tbID) as maxID FROM Table1 as A) a;

如果您要将这些行插入到新表中,则可以自动分配 id -- 但A 的值可能不同。

【讨论】:

    【解决方案2】:

    如果通过“合并”,您希望所有记录都以 table1 结尾 - 只需将 id 列从插入中删除:

    INSERT INTO table1 (etID, cNumber, cName)
    SELECT etID, cNumber, cName
    FROM table2
    

    如果您只想选择并查看来自 table2 的数据的递增 id,这是一种方法:

    SELECT A.tbID,
           A.etID,
           A.cNumber,
           A.cName
    FROM Table1 AS A
    
    UNION ALL
    
    SELECT (SELECT MAX(tbID) FROM Table1) + 
            ROW_NUMBER() OVER (ORDER BY B.etID),
           B.etID,
           B.cNumber,
           B.cName
    FROM Table2 AS B
    

    【讨论】:

    • 我会试试你的第二个建议@Aaron。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2023-02-06
    • 2013-04-21
    • 2021-02-08
    相关资源
    最近更新 更多