使用 Merge NOT MATCHED 插入多行

S H*_*son 5 t-sql sql-server merge

MERGE tbl_target t
USING tbl_source s
ON t.itemnum = s.itemnum
WHEN NOT MATCHED 
    INSERT (itemnum, minqty, maxqty, parent)
    VALUES (s.itemnum,0,99,10),(s.itemnum,0,99,80);
Run Code Online (Sandbox Code Playgroud)

如果某个项目在目标上不存在但源上确实存在,我正在尝试在目标表上插入两行。每次我尝试 SQL Server 时都会在 VALUES 之间的“,”上给出错误。

MERGE 语句必须以分号 (;)

是否可以在 MERGE 语句中进行多行插入?

sst*_*tan 8

可以通过调整USING子句为每个tbl_source.itemnum值返回多行:

MERGE tbl_target t
USING (
  select s.itemnum, 
         0 as minqty, 
         99 as maxqty,
         p.parent 
    from tbl_source s
    cross join (
      select 10 as parent
      union all
      select 80 as parent) p
) s
ON t.itemnum = s.itemnum
WHEN NOT MATCHED THEN
    INSERT (itemnum, minqty, maxqty, parent)
    VALUES (s.itemnum,s.minqty,s.maxqty,s.parent);
Run Code Online (Sandbox Code Playgroud)