9

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

谢谢!

我的上一条评论有误,现在一切都很好。

4

5 回答 5

18

您可以对列使用检查约束。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'
于 2008-10-15T15:11:15.957 回答
6

创建数据库约束:

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

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

ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
于 2008-10-15T15:11:06.880 回答
0

CHECK创建表时添加约束

CREATE TABLE Test(
      [ID] [int]  NOT NULL,
      [MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
于 2008-10-15T15:12:54.067 回答
0

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

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

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

于 2008-10-15T15:13:07.653 回答
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
于 2020-11-28T18:08:16.063 回答