SQL ограничение для проверки двух заглавных букв, за которыми следуют числовые значения - PullRequest
1 голос
/ 16 июля 2010

У меня есть следующая проверка sql, и она принимает значения, которые должны быть двумя заглавными буквами, за которыми следуют 3 числовых значения.


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)

как сделать так, чтобы он принимал только заглавные буквы, за которыми следуют 3 цифры для идентификатора проекта? ex.он должен отклонять значения типа «au123» и принимать значения типа «AU123».

Ответы [ 2 ]

3 голосов
/ 16 июля 2010

Вам необходимо объявить сопоставление с учетом регистра в ограничении 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 )
    )
1 голос
/ 16 июля 2010

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.
...