我在 access 中有一个查询,该查询应该在插入之前检查该项目是否已存在于数据库中:
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')
现在,我以前遇到过此错误,但通常是在没有表的情况下发生的,例如,如果您“从测试表中选择*”并键入“选择*”并省略from子句,您会得到相同的错误。但我有一张 table ?也许我的 where notexists 语法是错误的?
编辑:
好的,我已经按照建议添加了一个表“Dual”,并从这个问题粘贴了代码副本:Table-less UNION query in MS Access (Jet/ACE)
尝试添加如图所示的约束给了我这个错误:
按“确定”后,它会突出显示“检查”一词
我从来没有真正处理过约束(至少在 Access 方面......)我的语法可能是错误的
编辑2:
使用 ctrl G 命令添加约束
当我按下回车键时...
使用 ADO 添加约束:
当我按下运行键时...
最佳答案
在这种情况下,Dual
表会很有帮助。 Dual
表是一个单行表,当您并不真正需要源表但 SQL 解析器坚持要求时,可以在查询的 FROM 子句中使用它有一个。
某些数据库系统(例如 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
关于ms-access - 查询输入必须至少包含一个表或查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734142/