Почему я не могу добавить столбец в существующую таблицу с помощью флажка, который ссылается на другие столбцы в SQL

#sql #sql-server #tsql #alter-table #check-constraints

#sql #sql-сервер #tsql #изменить таблицу #контрольные ограничения

Вопрос:

Я использую SQL Server и пытаюсь добавить столбец и контрольное ограничение. Я обнаружил, что следующее работает:

 ALTER TABLE table.column  ADD isTrue BIT  GO ALTER TABLE table.column  ADD CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0)  

Однако менее многословный способ написания этого не работает:

 ALTER TABLE table.column  ADD isTrue BIT  CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0)  

Выводится следующая ошибка:

Ограничение ПРОВЕРКИ столбца для столбца «isTrue» ссылается на другой столбец, таблица «таблица».

Глядя на документы, я так и не смог понять, почему это так

Комментарии:

1. Что значит «не работает»? Вы получаете сообщение об ошибке? Если да, то в чем ошибка?

2. Отредактируем вопрос выше! Но ошибка заключается в следующем: «Ограничение ПРОВЕРКИ столбца для столбца «isTrue» ссылается на другой столбец, таблицу «таблица».`

Ответ №1:

Ваш синтаксис не совсем правильный. Ограничение, ссылающееся на несколько столбцов, является ограничением таблицы. Вы пытаетесь добавить ограничение таблицы, поэтому вам нужна запятая после определения типа данных для isTrue.

 ALTER TABLE table.column  ADD isTrue BIT,  CONSTRAINT CK_table_isTrue CHECK ((isTrue = 1 AND column1 = 0 AND column2 = 0 AND column3 IS NULL) OR isTrue = 0);  

Без запятой SQL Server думает, что вы пытаетесь добавить ограничение столбца, поэтому возникает ошибка, что вы ссылаетесь на другой столбец.