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

さて、あなたが見ることができるように、constraintempidkh%-私が覚えている限りでは-%次の文字の任意の数(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 に答える