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

问题描述:

以下语句用于创建表格CAMPUS。我得到的错误:访问> SQL>创建表。约束条件>外键

"Syntax error in CONSTRAINT clause"
"UPDATE" is highlighted signifying source of error.

通过消除 “ON UPDATE CASCADE ON DELETE NO ACTION” 我能没有问题创建表。

什么是正确的语法或程序? (在MS访问“帮助”是没有帮助)

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

它已经,因为我最后一次使用的MS Access超过10年,但似乎你只能写或者CASCADE或​​在ON UPDATEON DELETE之后存在参照约束。

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

ON DELETE NO ACTION 

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

+0

接入(ACE,喷气机,等等)以来的Jet 4.0(Access2000的)它的SQL DLL已经支持参照动作。但是,尽管在Access Team的文档中声明了,但Access从不支持'ON UPDATE SET NULL'(但支持'ON UPDATE DELETE')。 – onedaywhen 2011-06-15 07:47:44

+0

...和“NO ACTION”确实是SQL DDL中支持的参考操作。 – onedaywhen 2011-06-15 07:55:59

接入(ACE,喷气机,等等)在其SQL DLL以来的Jet 4.0(Access2000的)已经支持参照动作。但是,它们仅在ANSI-92 Query Mode中可用。

随着从ACCESS2003效果,接入UI可以被放置在ANSI-92查询模式,从而允许从一个查询的SQL视图执行的更新,更丰富的SQL DDL。需要注意的是ADO(OLE DB)总是使用ANSI-92查询模式和DAO使用“传统的” ANSI-89查询模式(IIRC但DAO对象模型已得到增强,包括所有引用行动,包括在后89​​动作)。

因此,我猜测你是因为你正试图执行ANSI-92查询模式SQL DDL得到一个语法错误,而在ANSI-89查询模式。