2016-02-22 2 views
1

Просто попытка сделать простую функцию в SQL Server 2012 для использования в качестве контрольного ограничения. Не могу пройти эту ошибку. Спасибо за любую помощь!Ошибка проверки SQL Server 2012 на udf

Ошибка я получаю:

Msg 547, уровень 16, состояние 0, строка 1 ALTER TABLE заявление противоречили проверочное ограничение "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) 
+0

Пожалуйста, форматировать код этот пост, чтобы мы могли его прочитать. Вы делаете это, вставляя каждую строку в 4 пробела. –

+0

thx, я был только в середине редактирования. – Iansberg

+1

Не видя базы данных и определения таблицы dbo.Batch, я предполагаю, что проблема наиболее вероятна с данными dbo.Batch. Существующее значение в столбце BatchQuantity должно быть меньше или равно 0, если столбец BatchQuantity является 'int'. –

ответ

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) 
Смежные вопросы