【问题标题】:SQL Create Table Syntax Error on Constraint约束上的 SQL 创建表语法错误
【发布时间】:2015-12-03 00:50:28
【问题描述】:

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

【问题讨论】:

标签: sql ms-access


【解决方案1】:

我相信你必须创建表并使用ALTER TABLE添加约束。

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

我不知道自 Access 2000 以来情况发生了多大变化

注意检查约束语句只能通过Jet OLE DB provider和ADO执行;如果 通过 Access SQL View 用户界面使用。

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

【讨论】:

    【解决方案2】:

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

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

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

    CurrentProject.Connection.Execute strDDL
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 2015-12-10
      相关资源
      最近更新 更多