Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于添加约束的Microsoft Access-SQL命令_Sql_Ms Access - Fatal编程技术网

用于添加约束的Microsoft Access-SQL命令

用于添加约束的Microsoft Access-SQL命令,sql,ms-access,Sql,Ms Access,我是stackoverflow的新手,最糟糕的是我对Microsoft Access还不熟悉。我的作业 假设已创建零件表,但不存在完整性约束。创建必要的完整性约束,以确保类字段的唯一允许值是AP、HW和SG。确保PartNum字段是主键,并且OrderLine表中的PartNum字段是外键,必须与Part表的主键匹配 因此,我知道如何使用Microsoft Access创建此项,方法是转到验证规则并添加AP、HW和SG的验证。但是,我还需要创建查询来显示这是如何完成的 我的代码: ALTER T

我是stackoverflow的新手,最糟糕的是我对Microsoft Access还不熟悉。我的作业

假设已创建零件表,但不存在完整性约束。创建必要的完整性约束,以确保类字段的唯一允许值是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查询来显示结果。感谢您的帮助

您可能想要:

ALTER TABLE Parts
ADD CONSTRAINT classRule
CHECK (class in ('AP', 'HW', 'SG'));
约束和名称之间有一个空格

将条件放在CHECK关键字后面的()中

将文本放在单引号内,因为这是区分字段名和值的地方

编辑

尽管上面的语法是有效的,但从我的阅读来看,您可能无法通过写出SQL在Access中添加检查约束,至少不能在查询设计器的SQL视图中添加

您可以通过转到感兴趣的表的设计视图来添加检查约束,然后在表示感兴趣的列的行上,在“验证规则”行中键入以下内容:

“注意,check constraint语句只能通过Jet OLE DB提供程序和ADO执行;如果通过Access SQL View用户界面使用,它将返回错误消息。”


上面的引文来自我刚才提供的URL。

存在
CHECK
子句,但使用它不是一个特别好的主意,因为它可以创建

也就是说,您的约束应该有效,但有两件事:

  • 应避免使用
    作为字段名。它本身不是一个保留字,但它是一个VBA保留字,Access允许您创建该字段,但稍后您可能会在其他地方遇到奇怪的问题

  • 正如Brian所说,您需要在
    检查中对字符串文本使用单引号

  • 您无法使用Access中的SQL查询编辑器中的
    CHECK
    创建
    containt
    ,每次尝试时,
    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'));"
    

如果没有得到错误,则约束已正确执行,否则,请仔细检查语法是否正确,字段名、括号是否正确平衡,以及
部分
表是否未打开。

我尝试了您的代码,但仍然没有成功!我正在使用MSAccess 2013,我不知道这是否有帮助。这是大多数数据库的正确语法,也就是说,我只是在access 2013中尝试过,但无法使其工作。这很奇怪,因为我在网上找不到任何可能表明访问语法不同的东西。虽然Access是一个奇怪的数据库。。。如果有,我会告诉你的luck@user3882733刚刚确认,在Access中,您无法在sql视图中写出检查约束的sql,但是如果您能够,我的答案中的sql就是您要写的。@BrianDeMilia Access实现了sql的一小部分,并为其添加了许多怪癖(我喜欢称之为“Bill's QL”)。实际上,必须在表设计视图中定义字段约束(验证规则)。行约束也可以在“表设计”视图中定义,打开“表属性”窗口。至于引用完整性约束,它们可以在“关系”窗口中定义(在功能区的某个位置查找“关系”按钮…我使用access已有一段时间了)@Barranka Yes。。。奇怪的是,考虑到它几乎与任何其他广泛使用的数据库都不相似,而所有其他广泛使用的数据库在许多方面都相似,为什么学校甚至用它来教授sql。这实际上是浪费时间,尤其是考虑到没有公司使用它,因为你的教科书或讲师完全错了。我估计50%的学生在这方面的问题属于同一条船——讲师或教科书根本不正确或误导。
CurrentProject.Connection.Execute "ALTER TABLE Parts ADD CONSTRAINT ClassRule CHECK (Class IN ('AP', 'HW', 'SG'));"