2017-04-08 86 views
0

請考慮下表。在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; 但是,我仍然需要處理其他條件。 –

回答

1
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 
相關問題