SQL Server 2012检查udf

时间:2016-02-22 23:07:33

标签: sql sql-server check-constraints

只是尝试在SQL Server 2012中创建一个简单的函数用作检查约束。不能错过这个错误。谢谢你的帮助!

我收到的错误:

  

消息547,级别16,状态0,行1 ALTER TABLE语句   与CHECK约束“CheckBatchQuantity”冲突。该   数据库“Ians23_SnackManufacturer”表中发生冲突   “dbo.Batch”,列'BatchQuantity'。

代码:

CREATE FUNCTION udfBatchNumber2
(@BatchQuantity int)

RETURNS int 

AS    

BEGIN
DECLARE @Return int
IF @BatchQuantity >10 
    SET @Return = 0

ELSE
    SET @Return = 1

RETURN @Return 
END
ALTER TABLE Batch
ADD CONSTRAINT CheckBatchQuantity
check ((dbo.[udfBatchNumber](BatchQuantity)) <= 0)

1 个答案:

答案 0 :(得分:0)

错误是由于Batch表中的BatchQuantity 大于而不是zero的现有记录。

首先更新/删除BatchQuantity > 0然后创建检查约束

的记录
update Batch
set BatchQuantity = NULL
Where BatchQuantity > 0

ALTER TABLE Batch
ADD CONSTRAINT CheckBatchQuantity
check ((dbo.[udfBatchNumber](BatchQuantity)) <= 0)

或者您可以使用NOCHECK创建约束,但不会检查现有数据

ALTER TABLE Batch WITH NOCHECK 
ADD CONSTRAINT CheckBatchQuantity
check ((dbo.[udfBatchNumber](BatchQuantity)) <= 0)