约束是数据库引擎用来约束一个表或一个表关系中的数据,以维持数据库完整性的一个对象。这些约束包括CHECK、UNIQUE、PRIMARY KEY,Null等。
Check约束的局限性:不能引用表中的其他行,不能引用其他表中的列。
可以在Check约束上设置"Check Existing Data On Creation Or Re-Enabling","Enforce For Inserts And Updates","Enforce For Replication"选项。
与约束有关的Sql语句:
列举中表中不可信的约束
SELECT name AS [Constraint Name],
object_name(parent_obj) as [Table Name]
FROM sysobjects
WHERE status & 2048 = 2048
或者
SELECT name, is_not_trusted,
object_name(parent_object_id) AS [Table Name],
FROM sys.check_constraints
WHERE parent_object_id = object_id('dbName')
或者
SELECT TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE IN ( 'FOREIGN KEY', 'CHECK' )
AND OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_NAME), 'CnstIsNotTrusted') = 1
ORDER BY
TABLE_NAME,
CONSTRAINT_NAME
Note:OBJECTPROPERTY系统函数用于返回数据库对象的有关属性信息,只能用于架构范围内的数据库对象,不能用于DDL触发器和事件通知对象。
参考:http://msdn.microsoft.com/en-us/library/ms176105.aspx
也可以通过下面的命令查看哪些数据违反了约束
DBCC CHECKCONSTRAINTS (Table Name)
约束与DML触发器各有其优点。约束能够维护数据库表域和关系之间的数据库完整性;而触发器则擅长于比较以往和当前值,并根据这些数据做出决策。一般来说,如有可能,使用约束更为有利;而将棘手的商业和审计逻辑留给触发器来解决。而且,需要注意约束和触发器的执行先后顺序。