自定义函数约束为什么不起作用?
直接上代码
/*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 语句时可能会产生意外结果