2008-10-15 1 views
6

Это, вероятно, простой ответ, но я не могу его найти. У меня есть таблица с столбцом целых чисел, и я хочу убедиться, что при вставке строки значение в этом столбце больше нуля. Я мог бы сделать это на стороне кода, но подумал, что лучше всего обеспечить его соблюдение на столе.В SQL Server 2005, как установить столбец целых чисел для обеспечения значений больше 0?

Спасибо!

Я был в ошибке с моим последним комментарием, все хорошо сейчас.

+0

Не могли бы вы пояснить немного? Я ожидал бы, что система поднимет исключение, если вы попытаетесь написать значение, которое нарушает ограничение. – ConcernedOfTunbridgeWells 2008-10-15 17:25:12

+0

Что случилось, чтобы первое не работало? Можете ли вы опубликовать точный код ограничения, который вы использовали, и ошибку или проблему, возникшие при попытке вставить данные? – HLGEM 2008-10-15 17:40:19

ответ

13

Вы можете использовать ограничение проверки для столбца. IIRC синтаксис для этого выглядит следующим образом:

create table foo (
    [...] 
    ,Foobar int not null check (Foobar > 0) 
    [...] 
) 

Как плакат ниже говорит (спасибо Constantin), то необходимо создать проверочное ограничение вне определения таблицы и дать ей осмысленное имя, чтобы, очевидно, какой столбец это относится к ,

alter table foo 
    add constraint Foobar_NonNegative 
     check (Foobar > 0) 

Вы можете получить из текста проверочных ограничений из словаря данных системы в sys.check_constraints:

select name 
     ,description 
    from sys.check_constraints 
where name = 'Foobar_NonNegative' 
5

Создание базы данных ограничения:

ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0) 

Вы можете иметь довольно сложные ограничения, тоже с участием нескольких столбцов. Например:

ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL) 
+0

Не забудьте «NOT NULL». Только CHECK не будет отклонять NULL. Таким образом, «EndDate is null» во втором примере является избыточным. – Constantin 2008-10-16 16:15:50

0

Добавить в CHECK ограничение при создании таблицы

CREATE TABLE Test(
     [ID] [int] NOT NULL, 
     [MyCol] [int] NOT NULL CHECK (MyCol > 1) 
) 
0

Я считаю, что вы хотите добавить CONSTRAINT в поле таблицы:

ALTER TABLE tableName WITH NOCHECK 
ADD CONSTRAINT constraintName CHECK (columnName > 0) 

Этот необязательный NOCHECK используется для ограничения применения ограничений к существующим строкам данных (которые могут содержать недопустимые данные) &, чтобы можно было добавить ограничение.

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