基本上我在约束中想要的逻辑是这样的......
IF([AssetTypeId] = 1)
THEN
[FileId] IS NOT NULL AND [Url] IS NULL
END
IF([AssetTypeId] = 0)
THEN
[FileId] IS NULL AND [Url] IS NOT NULL)
END
AssetTypeId是当前表的FK引用/约束。 我得到的错误建议语法错误无论我怎么说这个都有一个例外,当我这样做时......
([AssetTypeId] = 1) AND [FileId] IS NOT NULL AND [Url] IS NULL
OR
([AssetTypeId] = 0) AND [FileId] IS NULL AND [Url] IS NOT NULL
它给了我这个错误:
'Asset (dbo)' table
- Unable to add constraint 'CK_Asset_FileIdOrUrlRequiredNotBoth'.
The ALTER TABLE statement conflicted with the CHECK constraint "CK_Asset_FileIdOrUrlRequiredNotBoth". The conflict occurred in database "MyDb", table
“dbo.Asset”。
我似乎无法弄清楚为什么SQL不会让我这样做。 任何想法的家伙?
答案 0 :(得分:2)
在创建约束期间,消息表明违反了相同的约束:
'Asset (dbo)' table
- Unable to add constraint 'CK_Asset_FileIdOrUrlRequiredNotBoth'.
The ALTER TABLE statement conflicted with the CHECK constraint "CK_Asset_FileIdOrUrlRequiredNotBoth". The conflict occurred in database "MyDb", table
这意味着该表中的现有数据不符合您所需的约束。约束在语法上是有效的,或者它不会有这么远。
在实施约束之前,您需要找到错误的数据并进行更正。
E.g。
SELECT * from Asset where
([AssetTypeId] = 1) AND ([FileId] IS NULL OR [Url] IS NOT NULL )
OR
([AssetTypeId] = 0) AND ([FileId] IS NOT NULL OR [Url] IS NULL)
应该找到不良数据