gpt4 book ai didi

sql - ms access insert into no duplicates

转载 作者:行者123 更新时间:2023-12-01 15:01:09 25 4
gpt4 key购买 nike

我需要插入一个 Access 数据库。但如果列 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 这样的东西。关于重复 key 更新。

或者可能像 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 字段不正确。

有哪些?在你的选择声明中?

最佳答案

如果您正在使用 Microsoft Access ODBC 驱动程序更新数据库,那么您可以使用 INSERT ... SELECT ... WHERE NOT EXISTS。以下示例是使用 Python 编写的,但看起来您应该能够在 ColdFusion 中执行类似的操作。

import pyodbc
cnxn = pyodbc.connect("DSN=db1") # Microsoft Access ODBC
crsr = cnxn.cursor()

hours_ship = "ship102" # test data
hours_dup = 3 #

sql = """\
INSERT INTO Tbl_Hours_Comments (ship_num, dup)
SELECT ? as ship_num, ? AS dup
FROM (SELECT COUNT(*) AS n FROM Tbl_Hours_Comments) AS Dual
WHERE NOT EXISTS (SELECT * FROM Tbl_Hours_Comments WHERE dup = ?)
"""
params = (hours_ship, hours_dup, hours_dup)
crsr.execute(sql, params)
cnxn.commit()
print("{} row(s) inserted".format(crsr.rowcount))
crsr.close()
cnxn.close()

请注意,使用 Microsoft Access OLEDB 提供程序时,此方法有效。

关于sql - ms access insert into no duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com