2015-12-03 59 views
1

尝试创建一些带约束的表时,我偶然发现了语法错误。我使用的是Microsoft Access,它不断告诉我,我的第二个约束是错误的。到底是怎么回事?我的代码如下:SQL在约束条件下创建表语法错误

CREATE TABLE STORE 
(
StoreName Char(25) NOT NULL, 
City Char(35) NULL 
Country Char(50) NULL, 
Phone Char(8) NULL, 
Fax Char(15) NULL, 
Email Varchar(100) NULL, 
Contact Char(35) NULL, 
CONSTRAINT StorePK PRIMARY KEY(StoreName), 
CONSTRAINT Citizen CHECK (Country IN ('Belize', 'United States', 'Mexico','China', 'Germany', 'France', 'Netherlands')) 
); 
+0

我不知道MS Access支持检查约束:https://msdn.microsoft.com/en-us/library/office/ff836971.aspx#sectionSection0。 –

+0

[可以在访问和/或DAO中创建检查约束吗?](http://stackoverflow.com/questions/1660512/is-it-possible-to-create-a-check-constraint-在访问和 - 或-DAO) –

回答

1

我相信你已经创建表和使用ALTER TABLE添加约束。

ALTER TABLE STORE 
CONSTRAINT Citizen CHECK (
    Country IN (
     'Belize', 'United States', 'Mexico','China', 
     'Germany', 'France', 'Netherlands' 
    ) 
); 

我不知道有多少的情况已经改变,因为Access 2000中我敢肯定的是,一些限制仍然适用,因为这老文档中指出:

注意检查约束语句只能通过Jet OLE DB提供程序和ADO执行;如果通过Access SQL View用户界面使用 ,它将返回错误消息。从ADO/OleDb的执行时

https://msdn.microsoft.com/en-us/library/aa140015%28office.10%29.aspx#acintsql_ddlconst

1

CREATE TABLE语句有效访问DDL。约束是Jet 4中添加的DDL功能之一,在DAO下不受支持。

这也意味着CHECK默认不支持从查询设计器运行的查询。您可以通过设置Access选项“SQL Server兼容语法(ANSI 92)”来解决该限制。但是,该选项有其他副作用。如果您使用它,请确保测试您现有的查询以查看它们是否仍按预期运行。

我把你的语句文本中的变量,并成功执行这样说:

CurrentProject.Connection.Execute strDDL 

这工作,因为CurrentProject.Connection是ADO对象。