Как в SQL Server 2005 установить столбец целых чисел, чтобы значения были больше 0?

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

Спасибо!

Я ошибся с моим последним комментарием, теперь все в порядке.

Не могли бы вы немного уточнить правку? Я ожидаю, что система вызовет исключение, если вы попытаетесь записать значение, которое нарушает ограничение.

ConcernedOfTunbridgeWells 15.10.2008 21:25

что случилось, что первое не сработало? Можете ли вы опубликовать точный код ограничения, который вы использовали, и ошибку или проблему, возникшую при попытке вставить данные?

HLGEM 15.10.2008 21:40
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
7
2
4 902
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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» во втором примере является избыточным.

Constantin 16.10.2008 20:15
Ответ принят как подходящий

Вы можете использовать проверочное ограничение для столбца. 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'

Разве это не просто проверка того, что оно больше нуля или равно ..? Избавьтесь от знака равенства.

Galwegian 15.10.2008 19:16

Безымянное ограничение может в дальнейшем осложнить вашу жизнь. Лучше называть свои объекты с самого начала.

Constantin 16.10.2008 20:09

@ Константин: проголосовал бы за ваш комментарий, если бы мог. Хороший совет.

Mitch Wheat 20.01.2009 16:24

@ Константин, @ Митч Пшеничный. То же самое - хорошее мышление 99. Сообщение обновлено, чтобы указать на это.

ConcernedOfTunbridgeWells 25.01.2009 20:46

Добавьте ограничение 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

Другие вопросы по теме