【发布时间】:2010-10-12 23:49:25
【问题描述】:
我将 CSV 文件批量导入到临时表中,然后将行插入到目标表中(如果它们不存在)。
当我开始这个过程时,我的表有以下值
VECH01 AAA 111
VECH01 BBB 222
VECH01 CCC 333
VECH02 AAA 111
VECH02 BBB 222
VECH02 CCC 333
当我导入具有这些值的 CSV 文件时:
VECH01|DDD|444
VECH01|DDD|555
VECH02|CCC|XXX
第一行导入VECH01 DDD不在数据库中。
OK
第 2 行已导入,但 VECH01 DDD 已在数据库中,它是在上一次插入时导入的。
NOT OK
第 3 行未导入,因为 VECH02 CCC 已存在于数据库中。
OK
CREATE TABLE #csv
(
CarRedbookCode nvarchar(50) COLLATE Latin1_General_CI_AS,
AccessoryCode nvarchar(50) COLLATE Latin1_General_CI_AS,
AccessoryCodeAutoGeneral nvarchar(50) COLLATE Latin1_General_CI_AS
)
DECLARE @SqlStatement nvarchar(4000)
SET @SqlStatement =
'
BULK INSERT #csv
FROM ''' + @FileName + '''
WITH
(
FIELDTERMINATOR = ''|'',
ROWTERMINATOR = ''\n''
)
'
EXEC sp_executesql @SqlStatement
INSERT INTO MapRedbookAccessory (CarRedbookCodeAccessoryCode, CarRedbookCode, AccessoryCode, AccessoryCodeAutoGeneral)
select
src.CarRedbookCode + src.AccessoryCode
, src.CarRedbookCode
, src.AccessoryCode
, src.AccessoryCodeAutoGeneral
from
#csv src
left join
MapRedbookAccessory dst on dst.CarRedbookCodeAccessoryCode = src.CarRedbookCode + src.AccessoryCode
where
dst.CarRedbookCodeAccessoryCode is null
【问题讨论】:
标签: sql-server sql-server-2005 tsql