【问题标题】:Import data into SQL Server using BCP utility (export the log file with the error records and continue inserting with the normal records)使用 BCP 实用程序将数据导入 SQL Server(导出带有错误记录的日志文件并继续插入正常记录)
【发布时间】:2020-09-11 18:40:33
【问题描述】:

我有一个数据集,想将其导入我的数据库,条件是:

  1. 如果有记录无法导入,可以提取到日志中
  2. 虽然无法导入现有记录但仍允许导入可导入的记录(其他记录)并继续处理

目前我使用 BCP 实用程序将数据从 csv 文件导入到表中:

bcp table_name IN C:\Users\09204086121\Desktop\data.csv  -T -c -o C:\Users\09204086121\Desktop\logOut.log -e C:\Users\09204086121\Desktop\errOut.log

它只是满足我上面的条件1。 我需要当记录有错误时(重复主键,...),写入日志(1)并继续将其他正常记录插入表中(2)。

我想出了将触发器与bcp结合的想法,在创建触发器并将参数-h "FIRE_TRIGGERS"添加到bcp语句后,插入将忽略具有相同键但不会写入日志的记录.

这是我的触发器。

ALTER TRIGGER [PKGORDERCOMMON].[T_ImportData] ON [PKGORDERCOMMON].[IF_R_BUNRUI1]
INSTEAD OF INSERT
AS
BEGIN         
    --Insert non duplicate records
    INSERT INTO [IF_R_BUNRUI1]
    (
        SYSTEM_KB, 
        BUNRUI1_CD, 
        BUNRUI1_KANJI_NA, 
        BUNRUI1_KANA_NA, 
        CREATE_TS
    )
    SELECT SYSTEM_KB, 
        BUNRUI1_CD, 
        BUNRUI1_KANJI_NA, 
        BUNRUI1_KANA_NA, 
        CREATE_TS
    FROM inserted i
    WHERE NOT EXISTS
    (
        SELECT *
        FROM [IF_R_BUNRUI1] c
        WHERE c.BUNRUI1_CD = i.BUNRUI1_CD
        AND c.SYSTEM_KB = i.SYSTEM_KB
    );
END;

有没有人可以帮助我。

【问题讨论】:

  • 那么你的问题是什么?
  • 嗨,为什么不添加具有此约束的唯一约束对(BUNRUT1_CD,SYSTEM_KB),您不必添加此触发器..
  • @Sanpas 唯一约束只会防止重复,但也会停止批量复制过程。当然不会记录重复。
  • 是的,我明白这一点,但在 bcp 中有一些其他选项(参数,如 '-e "errorfile.txt"') :docs.microsoft.com/en-us/sql/tools/…
  • 我想使用 bcp 将数据导入表中。如果记录失败,则写入日志,其他记录将继续插入到表中。如何使用能满足以上2种情况的bcp?

标签: sql-server import triggers bcp


【解决方案1】:

BCP 不适用于您要求它执行的操作(区分好记录和坏记录)。例如, bcp -e 选项对显示的记录数有限制。我不确定这个限制是否与“最大错误”选项相关,但不管有没有限制。

您最好的选择是在 t-sql 中加载所有记录并处理不良数据。

以忽略转换错误的方式加载所有记录。要么:

  1. 将文件中的整行加载到一个大的 varchar 列中。根据需要解析列和 qc 数据。 或
  2. 将源文件中的所有列加载到大小足以容纳源数据的通用 varchar 列中。

无论哪种方式,完成后,使用 t-sql 检查您的数据并在好/坏记录之间进行拆分。

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2020-04-06
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多