Microsoft Access - SQL作业

时间:2014-07-28 00:49:48

标签: sql ms-access

我是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查询来显示我的结果。任何帮助表示赞赏!

2 个答案:

答案 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表是否未打开。