如何知道在使用 DAT 文件向 table 插入条目时导致约束失败的原因?

How to know what causes constraint failure during inserting enrties to a table using a DAT file?

我正在使用 DAT 文件将多个条目插入 table。我如何知道哪些记录导致约束失败(例如重复约束)?我正在使用 informix dbaccess 加载条目。

这是我如何加载它的示例代码:

load from 'table.dat'
insert into table (
    col1,
    col2,
    col3
);

这是我遇到的错误。它显示了 sql 代码失败的位置,但没有告诉我具体哪一行失败。

  268: Unique constraint (test.tableconstraint) violated.

  100: ISAM error:  duplicate value for a record with unique key.
Error in line 1
Near character position 0

您有两个选择:

  1. 使用 DB-Load (dbload) 而不是 DB-Access 加载数据。

    DBLOAD Load Utility           INFORMIX-SQL Version 12.10.FC6
    
    Usage: 
    
    dbload [-d dbname] [-c cfilname] [-l logfile] [-e errnum] [-n nnum]
        [-i inum] [-s] [-p] [-r | -k] [-X]
    
        -d  database name
        -c  command file name
        -l  bad row(s) log file
        -e  bad row(s) # before abort
        -s  syntax error check only
        -n  # of row(s) before commit
        -p  prompt to commit or not on abort
        -i  # of row(s) to ignore before starting
        -r  loading without locking table
        -X  recognize HEX escapes in character fields
        -k  loading with exclusive lock on table(s)
    
  2. 使用START VIOLATIONS TABLE and STOP VIOLATIONS TABLE。这将在一个 table 中记录违反约束的数据,并在另一个中给出诊断信息。如果愿意,您可以指定辅助 table 名称,但默认为带有后缀 _vio_dia.

    [=27 的基本 table 名称=]

两者都试一试——我怀疑违规 table 是更好的选择,但两者都有效。