SQL在约束

时间:2015-12-03 00:50:28

标签: sql ms-access

在尝试使用约束创建一些表时,我偶然发现了语法错误。我正在使用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'))
);

2 个答案:

答案 0 :(得分: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用户界面使用。

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

答案 1 :(得分:1)

从ADO / OleDb执行时,CREATE TABLE语句有效访问DDL。 {4}限制是Jet 4中添加的DDL功能之一,DAO不支持这些功能。

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

我将你的语句文本放在一个变量中并成功执行它:

CHECK

这很有效,因为CurrentProject.Connection.Execute strDDL 是一个ADO对象。