这可能是一个简单的答案,但我找不到。我有一个包含一列整数的表,我想确保在插入一行时该列中的值大于零。我可以在代码方面做到这一点,但认为最好在桌面上强制执行。
谢谢!
我的上一条评论有误,现在一切都很好。
这可能是一个简单的答案,但我找不到。我有一个包含一列整数的表,我想确保在插入一行时该列中的值大于零。我可以在代码方面做到这一点,但认为最好在桌面上强制执行。
谢谢!
我的上一条评论有误,现在一切都很好。
您可以对列使用检查约束。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'
创建数据库约束:
ALTER TABLE Table1 ADD CONSTRAINT Constraint1 CHECK (YourCol > 0)
您也可以有非常复杂的约束,涉及多个列。例如:
ALTER TABLE Table1 ADD CONSTRAINT Constraint2 CHECK (StartDate<EndDate OR EndDate IS NULL)
CHECK
创建表时添加约束
CREATE TABLE Test(
[ID] [int] NOT NULL,
[MyCol] [int] NOT NULL CHECK (MyCol > 1)
)
我相信您想在表字段中添加一个 CONSTRAINT :
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