如何知道在使用DAT文件向表插入属性期间导致约束失败的原因?

时间:2019-04-10 03:13:30

标签: informix dbaccess

我正在使用DAT文件将多个条目插入到表中。我怎么知道什么记录导致约束失败(例如重复约束)?我正在使用notifyix 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 个答案:

答案 0 :(得分:3)

您有两种选择:

  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 TABLESTOP VIOLATIONS TABLE。这会将违反约束的数据记录在一个表中,并在另一表中提供诊断信息。您可以根据需要指定辅助表名称,但是默认名称是带有后缀_vio_dia的基本表名称。

两者都尝试-我怀疑违反表是更好的选择,但是两者都可以。