2010-07-16 11 views
1

J'ai le contrôle SQL suivant et accepte les valeurs supposées être deux lettres majuscules suivies de 3 valeurs numériques.Contrainte SQL pour la vérification de deux lettres majuscules suivies de valeurs numériques


CREATE TABLE Project(
projectID  NCHAR(5)   NOT NULL  PRIMARY KEY, 
             CHECK(projectID LIKE '[A-Z][A-Z][0-9][0-9][0-9]'), 
projectName NVARCHAR(20) NOT NULL  UNIQUE, 
budget  MONEY   NOT NULL) 

comment voulez-vous faire en sorte qu'il n'accepte les lettres en majuscules suivies de 3 chiffres pour le ProjectID? ex. il devrait rejeter des valeurs comme 'au123' et accepter des valeurs comme 'AU123'.

+0

Qu'est-ce que SGBDR utilisez-vous? –

+0

Attendez ... le tableau ci-dessus vérifie-t-il de fonctionner ou non? C'est vague. Par ma lecture, il semble que cela devrait fonctionner. –

+0

Cela ne devrait pas fonctionner. "LIKE" ne fait pas de regexp, juste des caractères génériques (?, _). Par exemple, SQL Anywhere 11 semble introduire un nouveau mot-clé "REGEXP" pour pouvoir effectuer une correspondance regexp. – pascal

Répondre

1

Oracle 10g:

SQL> CREATE TABLE CHECK_CHECK (PROJECT_ID NCHAR(5) NOT NULL); 

Table created. 

SQL> ALTER TABLE CHECK_CHECK ADD CONSTRAINT CHECK_CHECK_CK01 
    2 CHECK (REGEXP_LIKE(PROJECT_ID, '[A-Z][A-Z][0-9][0-9][0-9]', 'c')); 

Table altered. 

SQL> insert into check_check values ('au123'); 
insert into check_check values ('au123') 
* 
ERROR at line 1: 
ORA-02290: check constraint (MED_AUDIT.CHECK_CHECK_CK01) violated 

SQL> insert into check_check values ('AU123'); 

1 row created. 
+0

REGEXP_LIKE() semble être sur la bonne voie pour faire partie d'un standard ANSI SQL 2011, remplaçant un "SIMILAR TO" qui est (est-ce?) Une partie de SQL 2008. – pascal

+0

merci pour l'essai mais cela ne marche pas avec REGExP_LIKE () – Sotelo

3

Vous devez déclarer un cas sensible à la collation dans votre contrainte CHECK:

Create Table Project  
    (
    ProjectId nchar(5) not null Primary Key 
    , ProjectName nvarchar(20) not null Unique 
    , Budget money not null 
    , Constraint CK_Project 
     Check (ProjectId Like '[A-Z][A-Z][0-9][0-9][0-9]' Collate Latin1_General_CS_AS) 
    ) 
Questions connexes