我试图用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)
我不明白为什么新约束不像原始约束那样停止无效价格。