0

我创建了一个存储员工记录的信息表,它的 SQL 查询如下...

CREATE TABLE info1 (
   empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk 
      CHECK (empid IN ('kh\%' ESCAPE '\''),
   initials CHAR(6), fname CHAR(25) NOT NULL, 
   lname CHAR(25), 
   userstatus INTEGER NOT NULL, 
   designation CHAR(10) NOT NULL
);

现在,正如你所看到的,约束在empid哪里kh%——据我所知——%意味着任何数量的以下字符(8当然限于)可以是任何东西,对吧?

我正在使用Java DB,奇怪的是它也将%符号作为字符串的一部分,所以如果我输入khce0001,它会说empchk违规,它只接受kh%

我应该怎么办?为什么会这样?

4

1 回答 1

1

这个 SQL 查询中的错误是我使用IN了而不是LIKE(我相信通配符检查),所以

  • 我放弃了约束......

    ALTER TABLE info DROP CONSTRAINT empchk;
    
  • 并用...改变了桌子

    ALTER TABLE info ADD CONSTRAINT empchk CHECK (empid LIKE ('kh%'));
    
  • 因此正确的 SQL 查询应该是......

    CREATE TABLE info1 (
        empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk 
            CHECK (empid LIKE ('kh%')),
        initials CHAR(6), 
        fname CHAR(25) NOT NULL,
        lname CHAR(25), 
        userstatus INTEGER NOT NULL,
        designation CHAR(20) NOT NULL
    );
    
于 2009-02-26T04:23:50.387 回答