SQL Server 2008: ограничить значение столбца относительно другого значения столбца - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть таблица с 2 столбцами

CREATE TABLE mytable
(
  x int
  y char(1)
)

Я хотел бы применить ограничение на y относительно значения x.

Например, когда x = 5, я хочуиметь y = 'a', когда x = 12 y = 'b' и так далее.Возможно ли это сделать в SQL Server 2008?Что-то вроде

case when x = 5 then y='a' end

Последнее утверждение не работает, поэтому прошу аналог.

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Вы можете установить выражение:

( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' )

Добавить больше правил, если хотите ...

Добавить ограничение к вашей таблице с этим SQL:

ALTER TABLE dbo.myTable WITH NOCHECK  
      ADD  CONSTRAINT CK_myTable
      CHECK  (( x = 5 AND y = 'a' ) OR ( x = 12 AND y = 'b' ));

Проверьте эту ссылку для большего количества примеров:

http://www.databasejournal.com/features/mssql/article.php/3811831/Using-Check-Constraints-to-Validate-Data-in-SQL-Server.htm

1 голос
/ 15 декабря 2010
CREATE TABLE mytable
(
  x int not null,
  y char(1) not null,
  constraint CK_mytable_myrules CHECK (
    1 = CASE
          WHEN x=5 AND y='a' THEN 1
          WHEN x=12 AND y='b' THEN 1
        /* More rules here */
          ELSE 0 END
)

A CASE выражение всегда должно возвращать значение .Логические значения не являются частью SQL.


Или, если общим правилом является «если мы не выполнили ни одно из этих правил, пропустите его», то у вас есть два варианта - вложенные CASE или«запасные» правила (мой собственный, только что придуманный термин):

вложенные СЛУЧАИ:

    1 = CASE
          WHEN x=5 THEN
             CASE WHEN y='a' THEN 1
                  ELSE 0 END
          WHEN x=12 THEN
             CASE WHEN y='b' THEN 1
                  ELSE 0 END
        /* More rules here */
          ELSE 1 END

или другой способ:

    1 = CASE
          WHEN x=5 AND y='a' THEN 1
          WHEN x=5 THEN 0
          WHEN x=12 AND y='b' THEN 1
          WHEN x=12 THEN 0
        /* More rules here */
          ELSE 1 END
0 голосов
/ 15 декабря 2010

Возможно установить такие ограничения.Ср текст ссылки Вам необходимо определить подходящий UDF.

Ах, кажется, есть и другие возможности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...