在SQL CHECK约束中使用函数

时间:2013-12-03 18:16:19

标签: sql sql-server-2008 check-constraints

我试图用CHECK约束中的嵌入式函数替换简单的CHECK约束,但它似乎并不限制我可以输入的数据。限制是防止产品量小于0.25且大于5,000。原始检查工作正常,但功能似乎根本没有做任何事情。

原始约束:

ALTER TABLE Prices
ADD CONSTRAINT CheckPrices CHECK ((Amount > 0.25) AND (Amount <= 5000.00))

功能:

ALTER FUNCTION dbo.CheckProductPrices
(
@productSKU int,
@priceDate smalldatetime
)
RETURNS bit
AS
BEGIN

DECLARE @retVal bit = 0

SELECT @retVal = CASE WHEN Amount > 0.25 AND Amount <= 5000.00 THEN 1 ELSE 0 END
FROM Prices
WHERE productSKU = @productSKU
AND priceDate = @priceDate

RETURN @retVal
END

新的CHECK约束:

ALTER TABLE Prices
    ADD CONSTRAINT CheckPrices CHECK (dbo.CheckProductPrices([productItem], [priceValidDate]) = 1)

我不明白为什么新约束不像原始约束那样停止无效价格。

0 个答案:

没有答案