2008-10-15 136 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) 
    [...] 
) 

随着海报的下面写着(感谢康斯坦丁),你应该在创建表定义外的检查约束,并给它一个有意义的名称,因此很明显它适用于哪一列。

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”。单独检查不会拒绝NULL。所以第二个例子中的“EndDate为空”是多余的。 – 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用于保持约束不被应用于现有数据行(可能包含无效数据)&以允许添加约束。

相关问题