在SQL Server 2005中,如何设置整数列以确保值大于0?

时间:2008-10-15 15:05:36

标签: sql sql-server-2005 constraints check-constraints

这可能是一个简单的答案,但我找不到它。我有一个带有整数列的表,我想确保插入一行时该列中的值大于零。我可以在代码方面做到这一点,但认为最好在桌面上执行它。

谢谢!

我的上一次评论错误,现在一切都很好。

5 个答案:

答案 0 :(得分:15)

您可以对列使用检查约束。 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'

答案 1 :(得分:5)

创建数据库约束:

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

您可以拥有非常复杂的约束,涉及多个列。例如:

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

答案 2 :(得分:0)

创建表格时添加CHECK约束

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

答案 3 :(得分:0)

我相信你想在表格字段中添加一个CONSTRAINT:

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

该可选的NOCHECK用于防止约束应用于现有的数据行(可能包含无效数据)和&amp;允许添加约束。

答案 4 :(得分:0)

您可以更改表格并添加以下约束(如波纹管)。

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