我有一个名为'DailyAllocations'
的表,其中有一个名为“已删除”的软删除标记(DATETIME, NULLABLE
),另一个名为ProcessHistoryID
(INT, NULLABLE
)的重要列
我需要在表中添加一个约束,这不允许软删除行,而ProcessHistoryID
中有一个值。
ALTER TABLE dbo.DailyAllocation
ADD CONSTRAINT chk_dont_delete_processed CHECK ((Deleted IS NULL AND ProcessHistoryID IS NULL) OR (Deleted IS NOT NULL AND ProcessHistoryID IS NULL))
但即使我的数据有效,当我尝试应用容器时它也会失败:
ALTER TABLE语句与CHECK约束冲突 “chk_dont_delete_processed”。冲突发生在数据库中 “MyDB”,表“dbo.DailyAllocation”。
这可能是我的逻辑,否则,我正在做一些奇怪的事情。
因此,您不能使用ProcessHistoryID删除已删除的行。我做错了什么?
以下查询不返回任何结果,这意味着数据当前是干净的:
SELECT * FROM dbo.DailyAllocation WHERE Deleted IS NOT NULL AND ProcessHistoryID IS NOT NULL
答案 0 :(得分:3)
使用此规则NOT (Deleted IS NOT NULL AND ProcessHistoryID IS NOT NULL)
更容易 - 反转单个不允许组合的结果。