1

我正在使用 Zeos 7 和 Delphi 2009,并且想在将数据发布到数据库之前检查数据库中是否已经存在特定字段下的值。

示例:
Cheese、Mouse、Trap 的字段关键字值

tblkeywordKEYWORD.Value = Cheese

以下有什么问题?还有更好的方法吗?

zQueryKeyword.SQL.Add('IF NOT EXISTS(Select KEYWORD from KEYWORDLIST ='''+
  tblkeywordKEYWORD.Value+''')INSERT into KEYWORDLIST(KEYWORD) VALUES ('''+
  tblkeywordKEYWORD.Value+'''))');
zQueryKeyword.ExecSql;

我尝试在 IBExpert 中使用唯一约束,但它给出了以下错误:

无效的插入或更新值:对象列受到限制 - 没有 2 个表行可以有重复的列值。尝试在唯一索引“UNQ1_KEYWORDLIST”中存储重复值(对活动事务可见)。

4

1 回答 1

1

考虑使用 UPDATE OR INSERT 或 MERGE 语句:

update or insert into KEYWORDLIST (KEYWORD) values(:KEYWORD) matching(KEYWORD)

有关详细信息,请查看 Firebird 安装文件夹中的以下文档:

  • doc\sql.extensions\README.update_or_insert.txt
  • doc\sql.extensions\README.merge.txt
于 2010-05-10T06:07:26.220 回答