2013-07-16 3 views
0

У меня есть таблица sql с let col1 и col2, я хочу создать ограничение или триггер (независимо от того, что работает), так что col2 должен измениться от NULL до Not Null в том и только в том случае, если значение, введенное в col1, равно 1.SQL Column 2 измените значение с NULL на NOT NULL, если значение столбца 1 равно 1

Дело в том, что я хочу сделать поле col2 обязательным, если col1 установлен в 1, в противном случае остается необязательным.

+0

Что RDBMS вы используете (SQL Server, MySQL, Oracle .. .)? – peterm

ответ

1
ALTER TABLE YourTable WITH CHECK ADD CONSTRAINT [CK_YourTable] CHECK (([col1]=(1) AND  [col2] IS NOT NULL OR [col1]<>(1))) 
GO 

Если вы хотите исключить пустую строку тоже тогда:

ALTER TABLE YourTable WITH CHECK ADD CONSTRAINT [CK_YourTable] CHECK (([col1]=(1) AND ( [col2] IS NOT NULL AND [col2] <> '') OR [col1]<>(1))) 
GO 
+0

Спасибо за быстрый ответ, после тестирования запроса выше, столбец по-прежнему разрешает NULL, вместо этого мы можем использовать NOT EMPTY? – Kelvin

+0

Если col1 имеет значение 1, он не допускает значение null в col2. Если col1 имеет любое другое значение, то null является опцией. Разве это не требование? –

+0

Да, это право – Kelvin

4

Вы упоминаете SQL Server в комментарии

CREATE TABLE YourTable 
(
Col1 INT, 
Col2 VARCHAR(25) NULL, 
CONSTRAINT ck_foo CHECK (NOT (Col1 = 1 AND Col2 IS NULL)) 
); 

NULL бы Disallow, как указано в этом вопросе. Для того, чтобы также запретить пустые строки в определении ограничения могут быть

CONSTRAINT ck_foo CHECK (NOT (Col1 = 1 AND ISNULL(Col2,'') = '')) 
+0

Спасибо за быстрый ответ, я попробовал, но его все еще разрешают значения NULL, я где-то читал, что NOT NULL и NOT EMPTY - это разные вещи в SQL Server, может это причина, из-за которой утверждение терпит неудачу? – Kelvin

+0

@ user2587302 - Он не позволяет принимать значения «NULL». 'INSERT INTO YourTable VALUES (1, NULL)' терпит неудачу. Что вы на самом деле пытаетесь предотвратить? И 'NULL', и пустая строка? –

+0

В основном пустой строке, будет заполнять форму в приложении, я бы хотел, чтобы она не сохранялась, если указанные выше условия не выполняются. – Kelvin

Смежные вопросы