Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2012 SQL Server合并两个表记录_Sql Server 2012 - Fatal编程技术网

Sql server 2012 SQL Server合并两个表记录

Sql server 2012 SQL Server合并两个表记录,sql-server-2012,Sql Server 2012,我有两张新桌子和两张旧桌子 旧表记录: A、B、C、D、E、F、G、H列 约翰测验| 1234567 | 1 | 2 | 1 | 3 | 1 |斯科特 新表格记录: John Test | 1234567 | null | null | 2 | null | null | Scott 希望以这样的方式合并这些行,即 John Test | 1234567 | 1 | 2 | 2 | 3 | 1 | Scott 规则是如果存在旧记录,则采用旧记录,并在新记录中查找不包括null的更改。匹配行

我有两张新桌子和两张旧桌子

旧表记录: A、B、C、D、E、F、G、H列 约翰测验| 1234567 | 1 | 2 | 1 | 3 | 1 |斯科特

新表格记录:

John Test | 1234567 | null | null | 2 | null | null | Scott
希望以这样的方式合并这些行,即

John Test | 1234567 | 1 | 2 | 2 | 3 | 1 | Scott 

规则是如果存在旧记录,则采用旧记录,并在新记录中查找不包括null的更改。匹配行基于B列(即1234567)

两个表的记录数相同吗

如果是,请执行以下操作:

SELECT 
    ISNULL(New.A,Old.A),
    ISNULL(New.C,Old.C),
    ISNULL(New.D,Old.D),
    ISNULL(New.E,Old.E),
    ISNULL(New.F,Old.F),
    ISNULL(New.G,Old.G),
    ISNULL(New.H,Old.H),
FROM OldTable Old
INNER JOIN NewTable New
    ON Old.B = New.B
SELECT 
    ISNULL(New.A,Old.A),
    ISNULL(New.C,Old.C),
    ISNULL(New.D,Old.D),
    ISNULL(New.E,Old.E),
    ISNULL(New.F,Old.F),
    ISNULL(New.G,Old.G),
    ISNULL(New.H,Old.H),
FROM OldTable Old
LEFT JOIN NewTable New
    ON Old.B = New.B

UNION ALL

SELECT 
    New.A,
    New.C,
    New.D,
    New.E,
    New.F,
    New.G,
    New.H,
FROM NewTable New
LEFT JOIN OldTable Old
    ON Old.B = New.B
WHERE
    Old.B IS NULL
如果不是,并且您希望拥有所有记录,请执行以下操作:

SELECT 
    ISNULL(New.A,Old.A),
    ISNULL(New.C,Old.C),
    ISNULL(New.D,Old.D),
    ISNULL(New.E,Old.E),
    ISNULL(New.F,Old.F),
    ISNULL(New.G,Old.G),
    ISNULL(New.H,Old.H),
FROM OldTable Old
INNER JOIN NewTable New
    ON Old.B = New.B
SELECT 
    ISNULL(New.A,Old.A),
    ISNULL(New.C,Old.C),
    ISNULL(New.D,Old.D),
    ISNULL(New.E,Old.E),
    ISNULL(New.F,Old.F),
    ISNULL(New.G,Old.G),
    ISNULL(New.H,Old.H),
FROM OldTable Old
LEFT JOIN NewTable New
    ON Old.B = New.B

UNION ALL

SELECT 
    New.A,
    New.C,
    New.D,
    New.E,
    New.F,
    New.G,
    New.H,
FROM NewTable New
LEFT JOIN OldTable Old
    ON Old.B = New.B
WHERE
    Old.B IS NULL

你好我们需要额外的信息来帮助您。请阅读。e、 g.将两者结合起来的规则是什么?如果新表有值,则使用该值,否则使用旧表?我们如何在新旧行之间进行匹配?列名称是什么?