My request:
INSERT into PriceListRows (PriceListChapterId,[No]) SELECT TOP 250 100943 ,N'2' FROM
This request works fine, and if necessary the following exception occurs:
The INSERT statement was contrary to the CHECK constraint "CK_PriceListRows_RowNo_Is_Not_Unqiue_In_PriceList". The conflict occurred in the database "TadkarWeb", the table "dbo.PriceListRows".
but with the change of SELECT TOP 250 to SELECT TOP 251 (yes! just changing 250 to 251!) the query is successful without exception checking the restriction!
Why is this weird behavior?
NOTES:
** EDIT 1 **
Check restriction function:
ALTER FUNCTION [dbo].[CheckPriceListRows_UniqueNo] ( @rowNo nvarchar(50), @rowId int, @priceListChapterId int, @projectId int) RETURNS bit AS BEGIN IF EXISTS (SELECT 1 FROM RowInfsView WHERE PriceListId = (SELECT PriceListId FROM ChapterInfoView WHERE Id = @priceListChapterId) AND (@rowID IS NULL OR Id <> @rowId) AND No = @rowNo AND (@projectId IS NULL OR (ProjectId IS NULL OR ProjectId = @projectId))) RETURN 0
** EDIT 2 ** Check the restriction code (which produces SQL Server 2012):
ALTER TABLE [dbo].[PriceListRows] WITH NOCHECK ADD CONSTRAINT [CK_PriceListRows_RowNo_Is_Not_Unqiue_In_PriceList] CHECK (([dbo].[tfn_CheckPriceListRows_UniqueNo]([No],[Id],[PriceListChapterId],[ProjectId])=(1))) GO ALTER TABLE [dbo].[PriceListRows] CHECK CONSTRAINT [CK_PriceListRows_RowNo_Is_Not_Unqiue_In_PriceList] GO
** EDIT 3 **
Implementation plans are here: https://www.dropbox.com/s/as2r92xr14cfq5i/execution%20plans.zip?dl=0
** EDIT 4 ** RowInfsView :
SELECT dbo.PriceListRows.Id, dbo.PriceListRows.No, dbo.PriceListRows.Title, dbo.PriceListRows.UnitCode, dbo.PriceListRows.UnitPrice, dbo.PriceListRows.RowStateCode, dbo.PriceListRows.PriceListChapterId, dbo.PriceListChapters.Title AS PriceListChapterTitle, dbo.PriceListChapters.No AS PriceListChapterNo, dbo.PriceListChapters.PriceListCategoryId, dbo.PriceListCategories.No AS PriceListCategoryNo, dbo.PriceListCategories.Title AS PriceListCategoryTitle, dbo.PriceListCategories.PriceListClassId, dbo.PriceListClasses.No AS PriceListClassNo, dbo.PriceListClasses.Title AS PriceListClassTitle, dbo.PriceListClasses.PriceListId, dbo.PriceLists.Title AS PriceListTitle, dbo.PriceLists.Year, dbo.PriceListRows.ProjectId, dbo.PriceListRows.IsTemplate FROM dbo.PriceListRows INNER JOIN dbo.PriceListChapters ON dbo.PriceListRows.PriceListChapterId = dbo.PriceListChapters.Id INNER JOIN dbo.PriceListCategories ON dbo.PriceListChapters.PriceListCategoryId = dbo.PriceListCategories.Id INNER JOIN dbo.PriceListClasses ON dbo.PriceListCategories.PriceListClassId = dbo.PriceListClasses.Id INNER JOIN dbo.PriceLists ON dbo.PriceListClasses.PriceListId = dbo.PriceLists.Id