1

我有一个表格和一个数组,我喜欢合并它们。

结构(t=目标,s=源):

ID          gID
----------- -----------
13          1
14          1
15          1
16          1
17          2
18          2
19          2

当 t.ID=s.ID 和 t.gID=s.gID 那么什么都不会发生。当 s.ID < 0 然后插入。当 s.ID 不存在时删除。

我无法在合并查询中构建它:

merge tableT as t
using @array as s
on (t.ID = s.ID) and (t.gID=s.gID)
when not matched and s.ID < 0 then
insert into
when not matched by source then delete;

当每一行的@array 中的gID=1 时,查询将删除所有gID=2 的。但只有 gID=1 应该受到影响。

有人知道如何解决这个问题吗?

4

2 回答 2

1

似乎您应该将目标限制为与gID源中相同的行,如下所示:

with tgt as (
  select *
  from tableT
  where gID in (select gID from @array)
)
merge tgt as t
using @array as s
on (t.ID = s.ID) and (t.gID=s.gID)
when not matched and s.ID < 0 then
insert into
when not matched by source then delete;
于 2013-02-08T10:57:01.113 回答
0
when not matched by source then delete;
    ^^^^^^^^^^^^^

如果您只想删除匹配项,请删除not.

于 2013-02-08T10:41:20.940 回答