【问题标题】:Access > SQL > Create Table . Constraints > Foreign Key访问 > SQL > 创建表。约束 > 外键
【发布时间】:2011-06-08 13:51:20
【问题描述】:

以下语句用于创建表 CAMPUS。我收到错误:

“CONSTRAINT 子句中的语法错误”
突出显示“UPDATE”,表示错误来源。

通过删除“ON UPDATE CASCADE ON DELETE NO ACTION”,我可以毫无问题地创建表。

什么是正确的语法或过程? (MS Access“帮助”没有帮助)

SQL 代码:

CREATE TABLE CAMPUS(                
    CampusID    Counter(1,5)    NOT NULL,    
    UnivID    Long    NOT NULL,    
    CampusName    Text(50)    NOT NULL,    
    Address    Text(50)    NULL,    
    Zip    Number    NULL,    
    Phone    Number    NULL,               
    CONSTRAINT    CampusPK    PRIMARY KEY    (CampusID,UnivID),    
    CONSTRAINT    CampusFK    FOREIGN KEY    (UnivID)
    REFERENCES UNIVERSITY(UnivID)
    ON UPDATE CASCADE 
    ON DELETE NO ACTION
    CONSTRAINT    CampusAK1    UNIQUE    (CampusName)    
    );

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    自 Jet 4.0 (Access2000) 以来,Access(ACE、Jet 等)在其 SQL DLL 中支持引用操作。但是,它们仅在 ANSI-92 Query Mode 中可用。

    从 Access2003 开始​​,Access UI 可以置于 ANSI-92 查询模式,允许从查询的 SQL 视图执行更新、更丰富的 SQL DDL。请注意,ADO (OLE DB) 始终使用 ANSI-92 查询模式,而 DAO 使用“传统”ANSI-89 查询模式(但是 IIRC DAO 的对象模型已得到增强,包括所有引用操作,包括 post-89 SET NULL 操作)。

    因此,我推测您遇到了语法错误,因为您在 ANSI-89 查询模式下尝试执行 ANSI-92 查询模式 SQL DDL。

    【讨论】:

      【解决方案2】:

      我上次使用 MS Access 已经 10 多年了,但在引用约束中,您似乎只能在 ON UPDATEON DELETE 之后写 CASCADESET NULL

      所以基本上你必须省略这部分

      ON DELETE NO ACTION
      

      链接http://www.sqlexamples.info/SQL/bsc_sqlddl1.htm

      【讨论】:

      • Access(ACE、Jet 等)自 Jet 4.0 (Access2000) 起就在其 SQL DLL 中支持引用操作。然而,尽管 Access 团队的文档中声明,Access 从未支持 ON UPDATE SET NULL(但确实支持 ON UPDATE DELETE)。
      • ...和NO ACTION 确实是 SQL DDL 中支持的引用操作。
      猜你喜欢
      • 2018-05-01
      • 1970-01-01
      • 2019-07-01
      • 2014-01-06
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2013-01-30
      相关资源
      最近更新 更多