Hea*_*ore 6 t-sql sql-server constraints check-constraints sql-server-2008-r2
采用以下示例表:
CREATE TABLE [dbo].[tbl_Example](
[PageID] [int] IDENTITY(1,1) NOT NULL,
[RequireLogin] [bit] NOT NULL,
[RequireAdmin] [bit] NOT NULL,
[HideIfLoggedIn] [bit] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
如何重写上面的内容以包括检查约束,如下所示:
[RequireAdmin]是假,如果[RequireLogin]是假(即只允许[RequireAdmin]为真,如果[RequireLogin]是真实的,同时允许[RequireLogin]为真,并[RequireAdmin]为假[HideIfLoggedIn]为True[RequireLogin]您通常在检查中执行嵌套的case语句,以使该类型的逻辑起作用.请记住,支票中的案例仍然必须是评估,因此需要采用该格式
CHECK (case when <exp> then 1 end = 1).
Run Code Online (Sandbox Code Playgroud)
查看您的确切要求,但似乎这也可以工作,可能更容易阅读:
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))
Run Code Online (Sandbox Code Playgroud)