我是stackoverflow的新手,最糟糕的是我是Microsoft Access的新手。我的作业
假设已创建Part表,但没有完整性约束。创建必要的完整性约束,以确保Class字段的唯一允许值为AP,HW和SG。确保PartNum字段是主键,OrderLine表中的PartNum字段是必须与Part表的主键匹配的外键。
所以我知道如何通过使用Microsoft Access来创建它,方法是转到验证规则并为AP,HW和SG添加验证。但是,我还需要创建查询以显示如何完成此操作。
我的代码:
ALTER TABLE Parts
ADD CONSTRAINT classRule
CHECK IN Class(AP, HW, SG)
;
我的教科书有一个与我刚才写的相似的例子。当我运行它时,我得到一个约束错误。我究竟做错了什么?此外,外键和主键已经完成,所以我只需编写sql查询来显示我的结果。任何帮助表示赞赏!
答案 0 :(得分:0)
你可能想要:
ALTER TABLE Parts
ADD CONSTRAINT classRule
CHECK (class in ('AP', 'HW', 'SG'));
CONSTRAINT和名称之间有一个空格
在CHECK关键字
之后的条件中放置条件将文字放在单引号内,因为这是区分字段名称与值
的区别修改强>
虽然以上是有效的语法,但从我正在阅读的内容中,您可能无法通过写出SQL在Access中添加检查约束,至少在查询设计器的SQL视图中是这样。
您可以通过转到感兴趣的表的“设计视图”添加检查约束,然后在表示感兴趣的列的行上,在“验证规则”的行中键入以下内容:
in ('AP', 'HW', 'SG')
http://www.databaseskill.com/1942875/
“注意检查约束语句只能通过Jet OLE DB提供程序和ADO执行;如果通过Access SQL View用户界面使用,它将返回错误消息。”
以上引用来自我刚刚提供的网址。
答案 1 :(得分:0)
CHECK
子句存在,但使用它并不是一个特别好的主意,因为它可以创建issues in you application。
话虽如此,你的约束应该有效,但有几件事情:
您应该避免使用单词Class
作为字段名称。它本身不是一个保留字,但它是一个VBA保留字,而Access允许你创建该字段,你可能会在其他地方遇到奇怪的问题。
正如Brian所说,你需要在CHECK
您无法在Access中的SQL查询编辑器中使用CONTRAINT
创建CHECK
,每次尝试时都会在CHECK
部分出错。 />
相反,您需要从VBA执行DDL SQL:只需打开VBA(Alt + F11),然后在立即窗口中键入以下内容(如果没有看到,则按Ctrl-G),然后按ENTER键:
CurrentProject.Connection.Execute "ALTER TABLE Parts ADD CONSTRAINT ClassRule CHECK (Class IN ('AP', 'HW', 'SG'));"
如果没有收到错误,则正确执行约束,否则,请仔细检查语法是否正确,字段名称,括号是否正确平衡,以及Part
表是否未打开。