Наверное, это простой ответ, но я не могу его найти. У меня есть таблица со столбцом целых чисел, и я хочу, чтобы при вставке строки значение в этом столбце было больше нуля. Я мог бы сделать это на стороне кода, но подумал, что было бы лучше применить это на столе.
Спасибо!
Я ошибся с моим последним комментарием, теперь все в порядке.
что случилось, что первое не сработало? Можете ли вы опубликовать точный код ограничения, который вы использовали, и ошибку или проблему, возникшую при попытке вставить данные?


Создайте ограничение базы данных:
ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0)
У вас также могут быть довольно сложные ограничения, включающие несколько столбцов. Например:
ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
Не забывайте "NOT NULL". Только CHECK не будет отклонять значения NULL. Таким образом, «EndDate is null» во втором примере является избыточным.
Вы можете использовать проверочное ограничение для столбца. IIRC синтаксис для этого выглядит так:
create table foo (
[...]
,Foobar int not null check (Foobar > 0)
[...]
)
Как говорится на плакате ниже (спасибо Константину), вы должны создать ограничение проверки вне определения таблицы и дать ему осмысленное имя, чтобы было очевидно, к какому столбцу оно применяется.
alter table foo
add constraint Foobar_NonNegative
check (Foobar > 0)
Вы можете получить текст проверочных ограничений из словаря системных данных в sys.check_constraints:
select name
,description
from sys.check_constraints
where name = 'Foobar_NonNegative'
Разве это не просто проверка того, что оно больше нуля или равно ..? Избавьтесь от знака равенства.
Безымянное ограничение может в дальнейшем осложнить вашу жизнь. Лучше называть свои объекты с самого начала.
@ Константин: проголосовал бы за ваш комментарий, если бы мог. Хороший совет.
@ Константин, @ Митч Пшеничный. То же самое - хорошее мышление 99. Сообщение обновлено, чтобы указать на это.
Добавьте ограничение CHECK при создании таблицы
CREATE TABLE Test(
[ID] [int] NOT NULL,
[MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
Я считаю, что вы хотите добавить ОГРАНИЧЕНИЕ в поле таблицы:
ALTER TABLE tableName WITH NOCHECK
ADD CONSTRAINT constraintName CHECK (columnName > 0)
Этот необязательный NOCHECK используется для предотвращения применения ограничения к существующим строкам данных (которые могут содержать недопустимые данные) и для добавления ограничения.
вы можете изменить свою таблицу и добавить новое ограничение, как показано ниже.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.table1 ADD CONSTRAINT
CK_table1_field1 CHECK (field1>0)
GO
ALTER TABLE dbo.table1 SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Не могли бы вы немного уточнить правку? Я ожидаю, что система вызовет исключение, если вы попытаетесь записать значение, которое нарушает ограничение.