【发布时间】:2013-08-06 05:33:26
【问题描述】:
需要从源表中删除所有行,然后将删除的行插入到目标表中
仅当目标表中尚不存在已删除的行时。
是否可以使用单个 sql 发出问题?
代码是我迄今为止尝试过的代码(尽管有错误)。 谢谢你!
create table #Target (column01 varchar(100)
,employee_number varchar(10)
)
Insert into #Target (column01, employee_number)
values ('2','222')
create table #Srs (column01 varchar(100)
,employee_number varchar(10)
)
Insert into #Srs (column01, employee_number)
values ('1','111')
,('2','222')
,('3','333')
,('4','444')
;with cteTable as (Select column01, employee_number from #Srs)
insert into #Target (column01, employee_number)
select * from (Delete from cteTable output deleted.column01, deleted.employee_number) t
where not exists (select 1
from #Target t1
where t1.employee_number = t.employee_number)
在调用“;with cteTable..”时,不应将 2,'222' 插入到 #Target 中
【问题讨论】:
-
您可能想了解 MERGE 的功能
-
嗨 Raj,我还没有尝试过那种方法来插入 Merge 语句。我可以使用 Merge 对源表进行删除吗?
-
根据定义,DML 不允许您在一个语句中影响 2 个表。
MERGE只影响一个目标表。 SQL Server 中最接近的内容是OUTPUT子句,但它适用于所有受影响的行。 -
@LuisLL - 使用composable DML,您可以对行应用过滤器,但它不允许
WHERE中的子查询
标签: sql-server sql-server-2008