2009-02-26 4 views
0

ich eine Info-Tabelle erstellt, die Mitarbeiterdatensatz speichert, die SQL-Abfrage für sie wie folgt ...Wildcard Zeichen in CHECK in Tabelle erstellen als String genommen

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

Nun, wie Sie Einschränkung in empid ist zu sehen kh% wo - soweit ich mich erinnere - % bedeutet, dass eine beliebige Anzahl der folgenden Zeichen (begrenzt auf 8 natürlich) kann alles sein, oder?

ich Java DB verwenden und seltsam ist es das % Symbol auch genommen ein Teil der Zeichenfolge zu sein, so, wenn ich khce0001 geben, heißt es empchk Verletzung, dauert es nur in kh%

Was soll ich tun? Warum passiert dies?

Antwort

1

Der Fehler in dieser SQL-Abfrage ist, dass ich IN statt LIKE verwendet haben (was ich tut Wildcard Prüfung glauben), so

  • ich die Einschränkung mit gekröpften ...

    ALTER TABLE info DROP CONSTRAINT empchk; 
    
  • und die Tabelle geändert mit ...

    ALTER TABLE info ADD CONSTRAINT empchk CHECK (empid LIKE ('kh%')); 
    
  • und damit die richtige SQL-Abfrage gewesen ...

    , um herauszufinden, sollte
    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

gut, dass Sie in der Lage waren. Denken Sie daran, die Frage zu schließen –

+0

@Unkown: Wenn dies die Lösung war, sollten Sie Ihre eigene Antwort als akzeptiert markieren! – Sk8erPeter