繁体   English   中英

SQL约束上的创建表语法错误

[英]SQL Create Table Syntax Error on Constraint

在尝试创建带有约束的表时,我偶然发现了语法错误。 我正在使用Microsoft Access,并且一直在提醒我第二个约束是错误的。 到底是怎么回事? 我的代码如下所示:

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'))
);

我相信您必须创建表,并使用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用户界面使用,它将返回错误消息。

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

从ADO / OleDb执行时,您的CREATE TABLE语句是有效的Access DDL。 CHECK约束是Jet 4附带的DDL功能之一,DAO不支持这些约束。

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

我将您的语句文本放入变量中,并成功执行如下:

CurrentProject.Connection.Execute strDDL

之所以CurrentProject.Connection是因为CurrentProject.Connection是ADO对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM