我在SQL Server 2005中創建了一個檢查約束,但是這個檢查約束不起作用。在SQL Server Management Studio中的一個INSERT語句告訴我下面的消息:爲什麼這個Check約束不起作用?
消息547,級別16,狀態0,第1行
INSERT語句衝突與CHECK約束 「MY_CHECK_CONSTAINT」。數據庫「MY_DB」中出現衝突,表「dbo.MY_TABLE」,列「MY_COLUMN」。
我已經加入了檢查約束用下面的代碼:
ALTER TABLE MY_TABLE WITH NOCHECK
ADD CONSTRAINT CK_MY_CHECK_CONSTRAINT CHECK (dbo.MY_FUNCTION(MY_PARAMETER)<1)
調用函數 「創建my_function」 返回一個int。
我的目標是,如果我的函數返回一個int小於1的插入語句可以成功完成,如果返回值大於0的INSERT語句,將被終止。現在
我的問題是,我的函數返回值0,但INSERT語句,始終終止。我究竟做錯了什麼?
我的函數的代碼如下:
CREATE FUNCTION MY_FUNCTION(@MY_PARAMETER uniqueidentifier)
RETURNS int
AS
BEGIN
declare @return int = 0
SET @return = (SELECT COUNT(MY_COLUMN) FROM MY_TABLE WHERE MY_COLUMN= @MY_PARAMETER)
return @return
END
感謝您的幫助。
什麼是錯的是你的*假設*該函數返回0,不正確。但是我們不能告訴你爲什麼這是不正確的,因爲你沒有向我們展示它的代碼。 –
我有上帝現在添加了我的函數的代碼。我希望這可以幫助你。 –
只需在'MY_COLUMN'上添加一個唯一約束。不要試圖在標量UDF中使用檢查約束。 –