SQL Server: невозможно добавить ограничение - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать таблицу и категорию цены на основе следующих критериев:

  • Для категории 1 диапазон значений составляет от 7 до 20 включительно.
  • Для категории 2 диапазон значений составляет от 20 до 50 включительно.
  • Для категории 3 диапазон значений составляет от 50 до 100 включительно.
  • Для любой другой категории диапазонзначения от 100 до 350 включительно.

Но я продолжал нажимать ошибку

CREATE TABLE LabTest
(
    testCode char(4) not null,
    name char(40) not null,
    category int not null,
    price decimal(30,2) not null,
    ageAppropriate int not null,

    constraint testCode_PK PRIMARY KEY (testCode),
    constraint age_CHK check (ageAppropriate >= 0),
);

ALTER TABLE LabTest
    ADD CONSTRAINT Category_CHK 
        CHECK (CASE Category
                  WHEN Price BETWEEN 7 AND 20 THEN 1
                  WHEN Price BETWEEN 20 AND 50 THEN 2
                  WHEN Price BETWEEN 50 AND 100 THEN 3
                  WHEN Price BETWEEN 100 AND 350 THEN 4
                  ELSE 0    
               END);

1 Ответ

0 голосов
/ 05 октября 2018

Вам нужно сформулировать ограничение, так как значение столбца прихода равно выражению CASE:

ALTER TABLE LabTest
ADD CONSTRAINT Category_CHK CHECK  
(
    Category = CASE WHEN Price BETWEEN 7 AND 20 THEN 1
                    WHEN Price BETWEEN 20 AND 50 THEN 2
                    WHEN Price BETWEEN 50 AND 100 THEN 3
                    WHEN Price BETWEEN 100 AND 350 THEN 4
                    ELSE 0 END
);

Примечание: диапазоны в вашем выражении CASE фактически перекрываются, потому что BETWEENвключительно на обоих концах.Итак, то, что вы написали, будет вести себя так же, как это:

CASE WHEN Price >= 7 AND Price <= 20 THEN 1
     WHEN Price > 20 AND Price <= 50 THEN 2
     WHEN Price > 50 AND Price <= 100 THEN 3
     WHEN Price > 100 AND Price <= 350 THEN 4
     ELSE 0 END

Если вышеописанное не так, как вы хотите обрабатывать граничные условия, то измените логику так, как вы хотите.

...