gpt4 book ai didi

ms-access - 使用 ON DELETE CASCADE 定义表时出现语法错误

转载 作者:行者123 更新时间:2023-12-01 09:26:22 25 4
gpt4 key购买 nike

我正在尝试使用 ON DELETE CASCADE在 MS Access 2007 的 FK 约束中,但我在表定义上遇到错误:

SQL Error: Syntax error in CONSTRAINT clause.



下面是创建表的代码:
CREATE TABLE Area (
Id AUTOINCREMENT PRIMARY KEY,
AreaType__Id int NOT NULL,
Tbl1 text(31) NOT NULL,
Tbl2__Id int NOT NULL,
CONSTRAINT UK_Area_1 UNIQUE (Tbl1, Container__Id),
CONSTRAINT FK_Area_1 FOREIGN KEY (AreaType__Id) REFERENCES AreaType (Id),
CONSTRAINT FK_Area_2 FOREIGN KEY (Tbl2__Id) REFERENCES Tbl2 (Id) ON UPDATE CASCADE ON DELETE CASCADE
);

我究竟做错了什么?我查看了 Access 帮助,我的语法似乎是正确的。我试过删除 ON UPDATE CASCADE部分,但得到了同样的错误。我还尝试使用引用表的默认 PK 字段( REFERENCES Container 而不是 REFERENCES Container (Id) ),但再次遇到相同的错误。我也搜索了 SO,但没有找到对我的情况有用的信息。它必须是一些简单的东西,但我目前没有看到它。

编辑

值得一提的是,除了没有 ON UPDATE CASCADE ON DELETE CASCADE 之外,表定义完全正常工作。部分。只有在添加 CASCADE 之后部分是否出现错误。

编辑 2

为了查明问题,以下是演示错误的新测试代码:

这有效:
CREATE TABLE T1 (Id AUTOINCREMENT PRIMARY KEY);

CREATE TABLE T2 (
Id AUTOINCREMENT PRIMARY KEY,
T1__Id int NOT NULL,
CONSTRAINT FK_T2_1 FOREIGN KEY (T1__Id) REFERENCES T1 (Id)
);

这给出了错误:
CREATE TABLE T1 (Id AUTOINCREMENT PRIMARY KEY);

CREATE TABLE T2 (
Id AUTOINCREMENT PRIMARY KEY,
T1__Id int NOT NULL,
CONSTRAINT FK_T2_1 FOREIGN KEY (T1__Id) REFERENCES T1 (Id) ON DELETE CASCADE
);

任何人都可以复制错误吗?

最佳答案

您的 CREATE语句是有效的 Access DDL,但必须使用 ADO 执行。

这是一个立即窗口 session ,它演示了这个问题......

strSql = "CREATE TABLE T2 (" & vbCrLf & _
" Id AUTOINCREMENT PRIMARY KEY, " & vbCrLf & _
" T1__Id int NOT NULL, " & vbCrLf & _
" CONSTRAINT FK_T2_1 FOREIGN KEY (T1__Id) REFERENCES T1 (Id) ON DELETE CASCADE" & vbCrLf & _
");"

' executing that statement with DAO triggers error 3289,
' "Syntax error in CONSTRAINT clause."
' (CurrentDb.Execute is a DAO Method)
CurrentDb.Execute strSql ' DAO -> fail

' CurrentProject.Connection.Execute is an ADO method,
' so this attempt executes without error
CurrentProject.Connection.Execute strSql ' ADO -> OK

请注意,如果您尝试从 Access 查询设计器执​​行语句,该语句也使用 DAO,因此也会触发错误 3289。

关于ms-access - 使用 ON DELETE CASCADE 定义表时出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23028884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com