1

我正在使用 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)
);

我也得到一个语法错误。检查文本值有什么我真的不理解的吗?我不可能看到其中任何一个是错误的。

4

3 回答 3

4

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

您可以执行单个 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方法成功。使用(DAO 方法)的相同语句CurrentDb.Execute将失败。
  • 使用 ADO,将字段声明为TEXT不包含长度(tester TEXT而不是tester TEXT(255))将为您提供备注字段。
于 2013-03-18T01:57:52.777 回答
2

您将需要针对连接运行:

ssql = "CREATE TABLE Test (tester Text)"
CurrentProject.Connection.Execute ssql

ssql = "ALTER TABLE test ADD CONSTRAINT " _
     & "myrule CHECK (tester IN ('ABC', 'BCD', 'CDE'))"
CurrentProject.Connection.Execute ssql

或者

sSQL = "CREATE TABLE Test (tester Text, " _
     & "CONSTRAINT myrule CHECK (tester IN ('ABC', 'BCD', 'CDE')))"

请注意,在这种情况下,名称 myrule 必须不存在,即使对于不同的表也是如此。

一些注意事项:是否可以在访问和/或 DAO 中创建检查约束?

于 2013-03-18T00:31:47.097 回答
-1

我的错,似乎 MS Access 不允许检查约束,除了主键和外键。我的老师直到去年才用 Oracle 教授她的课程,显然没有看到这不能在 MS Access 中完成。

于 2013-03-18T00:42:11.730 回答