我在访问中有一个查询,假设在插入之前检查该项是否已存在于数据库中:
INSERT INTO FinalizedPrintedStickers
Values('0000846043-481-9-0',
'48IG - 1F Straight Panel ',
'481 ',
'0',
'0',
'',
'210',
'Printed')
WHERE NOT EXISTS(SELECT [SN] FROM FinalizedPrintedStickers Where SN = '0000846043-481-9-0')
现在,我之前遇到过这个错误,但通常是在没有表格的情况下如果你“从测试表中选择*”并输入“Select *”并省略from子句就会得到同样的错误。但我有一张桌子?也许我的不存在语法是错误的?
修改
好的,我已根据建议添加了一个表格“Dual”,并在此问题中粘贴了代码副本:Table-less UNION query in MS Access (Jet/ACE)
尝试添加如图所示的约束给了我这个错误:
按下确定后突出显示“检查”一词
我从来没有真正处理过约束(在访问至少...)我的语法可能是错误的
编辑2:
使用ctrl G命令
添加约束
当我按下回车...
使用ADO添加约束:
当我按下跑步时......
答案 0 :(得分:7)
这是Dual
表可能有用的情况之一。 Dual
表是一个单行表,当你不真正需要一个源表时,可以在查询的FROM子句中使用它,但SQL解析器坚持要有一个
某些数据库系统(例如Oracle)提供Dual
虚拟表作为“标准设备”,但在Access中我们需要创建自己的虚拟表。有关该过程的优秀描述,请查看HansUp的回答here。
所以,一旦你的[双]表就位,即
id
--
1
...然后你可以使用这个查询执行你的INSERT(或不...):
INSERT INTO FinalizedPrintedStickers
(
SN,
Field2
)
SELECT
"0000846043-481-9-0" AS SN,
"48IG - 1F Straight Panel" AS Field2
FROM Dual
WHERE DCount("SN","FinalizedPrintedStickers","SN=""0000846043-481-9-0""")=0
答案 1 :(得分:0)
试试这个你可以使用简单的where子句
INSERT INTO FinalizedPrintedStickers
Values('0000846043-481-9-0',
'48IG - 1F Straight Panel ',
'481 ',
'0',
'0',
'',
'210',
'Printed')
WHERE SN Not In(SELECT [SN] FROM FinalizedPrintedStickers Where SN = '0000846043-481-9-0');