合并2个有条件的表格

时间:2019-11-13 21:21:52

标签: sql sql-server tsql

我有一个任务,可以将所有表有条件地插入到下一个信息中。我需要合并相同的值,例如Abonentas表主键(AbonentoID),其中miestoID是1。我尝试了函数合并,但是在{{1之后}}。我已经搜索了很多有关它的信息,但找不到解决方案。

错误

  

关键字“ WHEN”附近的语法不正确

代码

Inner Join

1 个答案:

答案 0 :(得分:2)

这是我编写合并的方式。

需要在VipAbonentai_source中返回以下列。我不确定它们来自哪个表。我已将声明写为common table expression (CTE)

  ab.[abonentoID]
, [asmensID]
, [planoID]
, [numeris]
, [sutartiesPradzia]
, [sutartiesPabaiga]

如果将其包装在transaction中,则可以在rollback上运行它而不会影响任何记录。另外,我输出记录以查看会发生什么变化。如果桌上有触发器,则必须注释掉OUTPUT行。

SET XACT_ABORT ON;
BEGIN TRANSACTION;

WITH 
VipAbonentai_source
AS 
(
    SELECT 
         ab.[abonentoID]
       , [asmensID]
       , [planoID]
       , [numeris]
       , [sutartiesPradzia]
       , [sutartiesPabaiga]
    FROM 
      Abonentas AS ab
      INNER JOIN Asmuo AS A ON ab.[asmensID] = A.[asmensID]
      INNER JOIN Miestas AS M ON M.[miestoID] = M.[miestoID]
    WHERE 
      M.[miestoID] = 1
) 
MERGE dbo.VipAbonentai AS T
USING VipAbonentai_source AS S
ON T.[abonentoID] = S.[abonentoID]
WHEN NOT MATCHED BY TARGET
THEN INSERT
(
  [abonentoID], [asmensID], [planoID], [numeris], [sutartiesPradzia], [sutartiesPabaiga]
)
VALUES
(
  S.[abonentoID], S.[asmensID], S.[planoID], S.[numeris], S.[sutartiesPradzia], S.[sutartiesPabaiga]
)
WHEN MATCHED
THEN UPDATE SET
 T.[asmensID] = S.[asmensID]
, T.[planoID] = S.[planoID]
, T.[numeris] = S.[numeris]
, T.[sutartiesPradzia] = S.[sutartiesPradzia]
, T.[sutartiesPabaiga] = S.[sutartiesPabaiga]
--WHEN NOT MATCHED BY SOURCE --< You may want to add a WHERE clause here
--THEN DELETE
OUTPUT @@SERVERNAME AS [Server Name], DB_NAME() AS [Database Name], $action, inserted.*, deleted.*;

ROLLBACK TRANSACTION;
--COMMIT TRANSACTION;

GO