小编典典

创建表,检查可能的文本值

sql

我正在使用MS Access 2010,并且尝试使用SQL创建表。我想添加一些检查约束,但遇到一些麻烦:

CREATE TABLE Test (
tester Text CHECK (tester IN ('ABC', 'BCD', 'CDE'))
);

我收到语法错误,

有什么建议?

谢谢!

编辑:对不起,如果我不清楚。我实际上想要检查的是他可以拥有的唯一值是“ ABC”,“ BCD”或“ CDE”。

EDIT2:我尝试了其他方法:

CREATE TABLE Test (
tester Text NOT NULL,
CONSTRAINT m_pk PRIMARY KEY(tester),
CONSTRAINT check_tester CHECK (DATALENGTH(tester) > 2)
);

而且我也收到语法错误。检查Text值时,我真的不了解吗?我可能看不到这两个地方哪里有错。


阅读 163

收藏
2021-04-14

共1个答案

小编典典

从Jet 4开始,CHECK从ADO(但不是从DAO)执行的Access DDL支持约束。

您可以执行一个DDL语句,该语句Test使用您的约束来创建表。您无需执行一个语句来创建表,而无需执行另一条语句来添加约束。

CREATE TABLE Test
    (
        tester TEXT(255),
        CONSTRAINT ABC_or_BCD_or_CDE CHECK
            (
                tester IN ('ABC', 'BCD', 'CDE')
            )
    );

我对它进行了格式化,以使其更易于检查。您可以使用此VBA执行以下语句:

strSql = "CREATE TABLE Test ( tester Text(255)," & vbCrLf & _
    "CONSTRAINT ABC_or_BCD_or_CDE" & vbCrLf & _
    "CHECK ( tester IN ('ABC', 'BCD', 'CDE')));"
Debug.Print strSql
CurrentProject.Connection.Execute strSql

笔记:

  • CurrentProject.Connection是ADO对象,因此其.Execute方法成功。使用CurrentDb.Execute(DAO方法)的相同语句将失败。
  • 使用ADO,将字段声明为TEXT不包含长度(tester TEXT而不是tester TEXT(255))将为您提供一个备注字段。
2021-04-14