访问> SQL>创建表。约束>外键

时间:2011-06-08 13:51:21

标签: sql ms-access

以下语句用于创建表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)    
    );

2 个答案:

答案 0 :(得分: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的对象模型已得到增强,包括所有参考操作,包括89后SET NULL操作)。

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

答案 1 :(得分:-1)

自从我上次使用MS Access以来已经超过10年了,但似乎您只能在CASCADESET NULL之后编写ON UPDATEON DELETE约束

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

ON DELETE NO ACTION

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