SQL批量插入:更新行

Dus*_*vis 0 sql-server sql-server-2008

我有一个从CSV批量插入表格的流程.我现在要求来自CSV的一些数据将包含"更新的"记录(先前导入但现在已更改的数据).

在这一点上,我有一个完整的重复表.是否可以根据PK更新BULK INSERT(甚至在插入之前删除)记录?

我宁愿不在此过程中添加第二步以删除重复项.

编辑:我只是运行类似于以下的删除查询而不是临时表

declare @tbl table
(
id int,
ref nvarchar(10)
)

insert into @tbl
values(1, 'AAAA'),
(2, 'BBBB'),
(3, 'CCCC'),
(4, 'AAAA'),
(5, 'BBBB'),
(6, 'AAAA')

delete from @tbl where id in (
select id from
(
select
    id,
    ref,
    RANK() OVER(partition by ref order by id desc) as rnk
from @tbl) d
where rnk > 1
)

select * from @tbl
Run Code Online (Sandbox Code Playgroud)

JNK*_*JNK 6

如果是我,我会加载到临时表并从那里进行重复.我不确定BCP是否具有该功能,但我会担心任何类型的逻辑,我没有直接和可见的控制.

它还会阻止您根据要加载的数据进行QC检查.使用临时表,您可以进行某种类型的PK比较,以确保您具有正确数量的不同值.