如何为SQL表列分配2个默认值?

Nir*_*ole 6 sql sql-server alter-table

我正在设计下面列的用户注册表.

CREATE TABLE [dbo].[NCT_UserRegistration]
(
    [User_Id] [int] IDENTITY(1,1) NOT NULL,
    [User_EmailId] [varchar](255) NULL,
    [User_Password] [varchar](512) NULL,
    [User_Name] [varchar](255) NULL,
    [User_MobileNum] [varchar](20) NULL,
    [User_Status] [varchar](15) NULL,
    [User_Role] [varchar](20) NULL,
    [User_CreatedDate] [timestamp] NULL,
    [User_UpdatedDate] [datetime] NULL,
    [Name] [varchar](30) NULL
)
Run Code Online (Sandbox Code Playgroud)

我对地位和角色的要求如下.

  • status VARCHAR(15) 指数,已启用的枚举,已禁用.
  • role VARCHAR(20) SUPER_ADMIN和PROJECT_ADMIN的枚举

我从上面所理解的是状态应该只与角色相同EnabledDisabled相同.如何设计我的表以确保它只需要这两个值?也有任何方式,例如,如果我提供1然后它是ENABLED和0为DISABLED.

我可以在这里得到一些想法吗?任何帮助,将不胜感激.谢谢

Mud*_*san 6

您需要使用CHECK CONSTRAINT来限制特定值

CREATE TABLE [dbo].[NCT_UserRegistration](
    [User_Id] [int] IDENTITY(1,1) NOT NULL,
    [User_EmailId] [varchar](255) NULL,
    [User_Password] [varchar](512) NULL,
    [User_Name] [varchar](255) NULL,
    [User_MobileNum] [varchar](20) NULL,
    [User_Status] [varchar](15) NULL CONSTRAINT chk_Status CHECK ([User_Status] IN ('ENABLED', 'DISABLED')),
    [User_Role] [varchar](20) NULL CONSTRAINT chk_Role CHECK ([User_Role] IN ('SUPER_ADMIN','DISABLED')),
    [User_CreatedDate] [timestamp] NULL,
    [User_UpdatedDate] [datetime] NULL,
    [Name] [varchar](30) NULL

)
Run Code Online (Sandbox Code Playgroud)

对于枚举,您必须在前端处理或在从表中重新执行值时处理,这是一个额外的步骤.

SELECT CASE WHEN [User_Status] = 1 THEN 'ENABLED' WHEN [User_Status] = 0 THEN 'DISABLED' END As UserStratus
FROM [dbo].[NCT_UserRegistration]
Run Code Online (Sandbox Code Playgroud)