【发布时间】:2017-09-11 18:55:18
【问题描述】:
我需要插入一个访问数据库。但如果 dup 列已经在表中,则跳过该行。
到目前为止,我所拥有的是:
<cfoutput query="hours">
<cfquery name="Employee" datasource="test">
INSERT INTO Tbl_Hours_Comments
(ID, ship_num, dup)
values(#hours.id#, #hours.ship#, #hours.dup#)
</cfquery>
</cfoutput>
如果我不将 dup 设为主键。然后它将插入重复项。如果我制作主键。然后我得到一个错误。
我想我需要类似 MySQL 的东西。重复密钥更新。
或者可能像 Oracle 中的 dup_val_on_index 异常处理。
@戈德汤普森
我试过了(不确定我是否做得对):
<cfoutput query="hours">
<cfquery name="Insert_Employee" datasource="trung">
INSERT Tbl_Hours_Comments (ID, ship_num, dup)
values(#hours.id#, #hours.ship#, #hours.dup#)
SELECT ? as dup
FROM( SELECT COUNT(*) as n from Tbl_Hours_Comments) as Dual
WHERE NOT EXISTS
( SELECT *
FROM Tbl_Hours_Comments
WHERE dup = ?
)
</cfquery>
</cfoutput>
但我得到 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确。
什么是?在您的选择声明中?
【问题讨论】:
-
如果这是 VBA,可以使用
Set Warnings False关闭警告,然后运行 SQL 然后Set Warnings True或使用 CurrentDb.Execute。评论stackoverflow.com/questions/14383503/… -
“小时”查询中的数据来源是什么?如果它来自同一数据库中的表,则跳过 cfloop 并使用包含
where not exists...子句的单个insert into / select ... from ...语句会更有效。 -
hours 来自一个查询的 cf 查询。数据位于另一个数据源中。
-
澄清一下,您是指同一个 MS Access 数据库中的另一个 表 吗?还是一个完全独立的数据库?如果是这样,哪种类型 - MS Access、SQL Server 等等? MS Access 支持querying external databases。
标签: sql ms-access coldfusion