采用以下示例表:
CREATE TABLE [dbo].[tbl_Example](
[PageID] [int] IDENTITY(1,1) NOT NULL,
[RequireLogin] [bit] NOT NULL,
[RequireAdmin] [bit] NOT NULL,
[HideIfLoggedIn] [bit] NOT NULL
)
如何重写上述内容以包含检查约束,如下所示:
- 如果
[RequireLogin]
为 False,则强制[RequireAdmin]
为 False(即仅允许如果
为True为 True 且[RequireLogin]
为True,同时允许[RequireLogin]
,则[RequireAdmin][RequireAdmin]
为 False - 仅当
[RequireLogin]
为 False 时才允许[HideIfLoggedIn]
为 True
最佳答案
您通常会在检查中执行嵌套的 case 语句,以使该类型的逻辑发挥作用。请记住,检查中的案例仍然必须是评估,因此它将采用以下形式
CHECK (case when <exp> then 1 end = 1).
查看您的具体要求,但是这似乎也可行并且可能更易于阅读:
CREATE TABLE [dbo].[tbl_Example]
(
[PageID] [int] IDENTITY(1,1) NOT NULL,
[RequireLogin] [bit] NOT NULL,
[RequireAdmin] [bit] NOT NULL,
[HideIfLoggedIn] [bit] NOT NULL
)
ALTER TABLE [dbo].[tbl_Example] ADD CONSTRAINT
[RequireAdmin] CHECK
((RequireAdmin = RequireLogin) OR
(RequireLogin=1));
ALTER TABLE [dbo].[tbl_Example] ADD CONSTRAINT
[HideIfLoggedIn] CHECK
((RequireLogin=1 AND HideIfLoggedIn=0) OR
(RequireLogin=0 AND HideIfLoggedIn=1) OR
(RequireLogin=0 AND HideIfLoggedIn=0))
关于sql-server - 检查约束 – 仅当另一列为 true 时才允许一列为 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15329103/