2009-02-26 5 views
0

j'ai créé une table d'information qui Disquaires des employés, la requête SQL pour elle comme suit ...caractère Wildcard à CHECK Créer une table prise en tant que chaîne

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

Maintenant, comme vous pouvez le voir contrainte empid est kh% où - autant que je me souvienne - % signifie que n'importe quel nombre des caractères suivants (limité à 8 bien sûr) peut être quelque chose, non?

J'utilise Java DB et étrangement, il a pris le symbole % aussi d'être une partie de la chaîne si j'entre khce0001, il dit empchk violation, il ne prend en kh%

Que dois-je faire? Pourquoi cela arrive-t-il?

Répondre

1

L'erreur dans cette requête SQL est que je l'ai utilisé IN au lieu de LIKE (que je crois ne contrôle générique), alors

  • Je lâchai la contrainte avec ...

    ALTER TABLE info DROP CONSTRAINT empchk; 
    
  • et modifié la table avec ...

    ALTER TABLE info ADD CONSTRAINT empchk CHECK (empid LIKE ('kh%')); 
    
  • et par conséquent la requête SQL correcte aurait été ...

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

bien que vous étiez en mesure de comprendre. envisager de fermer la question –

+0

@Unkown: si c'était la solution, vous devriez marquer votre propre réponse comme acceptée! – Sk8erPeter

Questions connexes