如果在 BulkInsert 期间插入该记录,则更新该记录的某些列

Update some columns of a record if that record is being inserted during a BulkInsert

Table 在数据库上:

TABLE 相册 - ID_ON_DISCOGS(唯一) - ARTIST_ID - LABEL_ID

我必须将记录批量插入此 table。

问题是有时批量插入可能会尝试插入一条 ID_ON_DISCOGS 已经存在的记录。

在这种情况下,我想用新值更新 ARTIST_ID 或 LABEL_ID 字段。

示例:

专辑记录已在数据库中:

 |ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
 :------------------------------------:
 |123           | 345       | null    |
 :------------------------------------:

专辑记录我尝试插入:

 |ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
 :------------------------------------:
 |123           | null       | 567    |
 :------------------------------------:

我想达到的成绩记录:

 |ID_ON_DISCOGS | ARTIST_ID | LABEL_ID|
 :------------------------------------:
 |123           | 345        | 567    |
 :------------------------------------:

可能是适合内容提供商的解决方案。

这将更新所有具有匹配 ID_ON_DISCOGS 的记录。

 REPLACE INTO ALBUM
(ID_ON_DISCOGS, ARTIST_ID, LABEL_ID)
SELECT src.ID_ON_DISCOGS, src.ARTIST_ID, src.LABEL_ID
FROM ImportTable src
INNER JOIN ALBUM dest
ON src.ID_ON_DISCOGS = dest.ID_ON_DISCOGS

下一个查询将插入 table 中没有的剩余记录。

INSERT INTO ALBUM
SELECT imp.ID_ON_DISCOGS
       ,imp.ARTIST_ID
       ,imp.LABEL_ID
FROM ImportTable imp
WHERE imp.ID_ON_DISCOGS NOT IN (SELECT ID_ON_DISCOGS FROM ALBUM)

就我个人而言,我会先执行批量插入。完成后,我将执行更新语句。也许尝试用 CTE 更新?参见 mobsites 的回答,例如:SQL UPDATE row Number