2015-08-16 85 views
2

我有一个两个表格,TABLE A和TABLE B具有相同的格式。我正在使用表B MERGE语句作为源与条件合并(SQL Server)

TYPE ITEM QTY1 QTY2 QTY3 
A  AAA  100  200  300 
A  BBB  150  250  310 
B  CCC  101  123  131 
C  DDD  102  55  12 

的事情是,我想只有当记录目标表更新已经存在特定列。这是我想要做的,但我似乎无法让它工作。我只是想知道,这是否可能使用MERGE声明?

MERGE TABLE A 
    USING (SELECT * FROM TABLE B) B 
    ON B.TYPE = A.TYPE AND B.ITEM = A.ITEM 
    WHEN NOT MATCHED THEN 
     INSERT (TYPE, ITEM, QTY1, QTY2, QTY3) VALUES (B.TYPE, B.ITEM, B.QTY1, B.QTY2, B.QTY3) 
    WHEN MATCHED THEN 
     CASE 
      WHEN 'A' : UPDATE SET A.QTY1 = B.QTY1, A.QTY2 = B.QTY2, A.QTY3 = B.QTY3 
      WHEN 'B' : UPDATE SET A.QTY2 = B.QTY2 , A.QTY3 = B.QTY3 
      WHEN 'C' : UPDATE SET A.QTY3 = B.QTY3 
     END; 

回答

1

您可以添加一个条件到WHEN MATCHED条款,并有这些多:

MERGE [TABLE A] 
USING (SELECT * FROM [TABLE B]) B 
ON B.TYPE = A.TYPE AND B.ITEM = A.ITEM 
WHEN NOT MATCHED THEN 
    INSERT (TYPE, ITEM, QTY1, QTY2, QTY3) VALUES (B.TYPE, B.ITEM, B.QTY1, B.QTY2, B.QTY3) 
WHEN MATCHED AND A.TYPE = 'A' THEN 
    UPDATE SET A.QTY1 = B.QTY1, A.QTY2 = B.QTY2, A.QTY3 = B.QTY3 
WHEN MATCHED AND A.TYPE = 'B' THEN 
    UPDATE SET A.QTY2 = B.QTY2 , A.QTY3 = B.QTY3 
WHEN MATCHED AND A.TYPE = 'C' THEN 
    UPDATE SET A.QTY3 = B.QTY3; 

欲了解更多信息,请参阅the documentation

+1

我不敢相信我没有看到这个未来.....非常感谢你! –