2017-04-08 12 views
0

以下の表を検討してください。SQLサーバーのあるテーブルから別のテーブルにデータをコピーする

Table 1: 
ID Name Address DateOfBirth DateOfJoin CurrentProject 


Table 2: 
ID Name DateOfJoin CurrentProject 

にはどうすれば表2の値がnullのときを除いてマージしながら、表2の値は、表1の値を上書きする必要があり、そのようなことを表1に表2からデータをコピーするには、SQLサーバーのDBのスクリプトを記述します。 表2の値がNULLの場合、表1の値が優先されます。

上記の表の例では、DataofJoinCurrentProjectの値は、特定のIDについて表1の値になるはずです。 DateOfJoinとCurrentProject値が表2でNULLの場合、表1の値はそのまま残ります。また、表2にあるが表1にないすべてのIDは、スクリプトの実行後に表1にコピーする必要があります。

+0

これまでに何を試しましたか? –

+0

Iにより表2から表1に欠落しているレコードを挿入することができ @PeterSmith: 表1(ID、DateOfJoin、CurrentProject)に挿入 Table2.ID、Table2.DateOfJoinを選択し、表2 からTable2.CurrentProject参加左Table1.IDが nullであり、私がでTABLE1に両方のテーブルのデータをマージすることができるよTable1.ID = Table2.ID 上の表1: UPDATE表1 SET Table1.DateOfJoin = Table2.DateOfJoin、 \t Table1.CurrentProject = Table2.CurrentProject 表1 FROM Table1.ID = Table2.ID ON表2 をJOIN。 しかし、私はまだ他の条件を処理する必要があります。 –

答えて

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 
関連する問題