日期:2014-05-17  浏览次数:20527 次

自定义函数约束为什么不起作用?
直接上代码 
/*CREATE TABLE CheckTbl (col1 int, col2 int);
insert into CheckTbl
values(1,2)
GO
CREATE FUNCTION CheckFnctn()
RETURNS int
AS 
BEGIN
   DECLARE @retval int
   SELECT @retval = COUNT(*) FROM CheckTbl
   RETURN @retval
END;
GO
ALTER TABLE CheckTbl
ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );
GO
*/
delete from checktbl--根据我的理解这条语句应该执行不成功才对。但是为毛可以执行成功呢?

------解决方案--------------------
约束是针对insert/update的吧,约束改为dbo.CheckFnctn() = 1 将insert不进去。
------解决方案--------------------
删除与check无关.
------解决方案--------------------
2008R2联机丛书(其他版本不清楚)上有这么一句:
执行 DELETE 语句时不验证 CHECK 约束。因此,使用特定类型的 CHECK 约束对表执行 DELETE 语句时可能会产生意外结果