在sql server中将数据从一个表复制到另一个表

问题描述:

请考虑下表。在sql server中将数据从一个表复制到另一个表

Table 1: 
ID Name Address DateOfBirth DateOfJoin CurrentProject 


Table 2: 
ID Name DateOfJoin CurrentProject 

我怎样写一个SQL Server数据库脚本,从表2中的数据复制到表1这样,表2的值应同时除了在表2中值为null合并改写表1的值。 如果表2的值为空,则表1的值将优先。

上表中的示例中,DataofJoinCurrentProject的值应该成为特定ID的表1中的值。当表2中的DateOfJoin和CurrentProject值为空时,表1的值将保持原样。此外,表2中列出但不是表1中的所有ID应在运行脚本后复制到表1中。

+0

你到目前为止试过了什么? –

+0

@PeterSmith 我可以插入通过缺失从表2在表1中记录: 插入到表1(ID,DateOfJoin,CurrentProject) 选择Table2.ID,Table2.DateOfJoin,Table2.CurrentProject从表2 左连接表1对Table1.ID = Table2.ID 其中Table1.ID为空 而且我能够通过这两个表的数据合并到表1: UPDATE目录一 SET Table1.DateOfJoin = Table2.DateOfJoin, \t Table1.CurrentProject = Table2.CurrentProject FROM 表1 JOIN 表2 ON Table1.ID = Table2.ID; 但是,我仍然需要处理其他条件。 –

BEGIN 

    CREATE TABLE #Table1(
    ID INT, 
    Name VARCHAR(50), 
    Address VARCHAR(50), 
    DateOfBirth DATE, 
    DateOfJoin DATE, 
    CurrentProject VARCHAR(50) 
    ) 

    CREATE TABLE #Table2(
    ID INT, 
    Name VARCHAR(50), 
    DateOfBirth DATE, 
    DateOfJoin DATE, 
    CurrentProject VARCHAR(50) 
    ); 

    INSERT INTO #Table1 VALUES 
    (1,'NAME 1','ADDRESS 1','01/01/1990','01/01/2017','PROJECT 1'), 
    (2,'NAME 1','ADDRESS 2','01/01/1991','01/01/2017','PROJECT 2'), 
    (3,'NAME 1','ADDRESS 3','01/01/1992','01/01/2017','PROJECT 3'), 
    (4,'NAME 1','ADDRESS 4','01/01/1993','01/01/2017','PROJECT 4'); 


    INSERT INTO #Table2 VALUES 
    (1,'NAME 1','01/01/1990','01/01/1988',NULL), 
    (3,'NAME 3','01/01/1991',NULL,'PROJECT 33'), 
    (5,'NAME 5','01/01/1986','01/01/2017','PROJECT 5'), 
    (6,'NAME 6','01/01/1985','01/01/2017','PROJECT 6'); 


    SELECT * FROM #Table1; 
    SELECT * FROM #Table2; 

    -- Insert records which exists in Table but not in table 1 
    INSERT INTO #Table1(ID,Name,DateOfBirth,DateOfJoin,CurrentProject) SELECT * FROM #Table2 WHERE ID not in (SELECT ID FROM #table1) 

    -- Update matching id records from table 1 with table 2 
    UPDATE #Table1 SET 
    Name = CASE WHEN T2.Name='' or T2.Name IS NULL THEN #Table1.Name ELSE T2.Name END, 
    DateOfBirth = CASE WHEN T2.DateOfBirth='' or T2.DateOfBirth IS NULL THEN #Table1.DateOfBirth ELSE T2.DateOfBirth END, 
    DateOfJoin = CASE WHEN T2.DateOfJoin='' or T2.DateOfJoin IS NULL THEN #Table1.DateOfJoin ELSE T2.DateOfJoin END, 
    CurrentProject = CASE WHEN T2.CurrentProject='' or T2.CurrentProject IS NULL THEN #Table1.CurrentProject ELSE T2.CurrentProject END 
    FROM #Table2 T2 WHERE #Table1.ID= T2.ID 

    select * from #Table1 

    drop table #Table1; 
    drop table #Table2; 


    END