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

标签 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
)

我对身份和角色的要求如下。

  • status VARCHAR(15) 索引,ENABLED、DISABLED 枚举。
  • role VARCHAR(20) SUPER_ADMIN 和 PROJECT_ADMIN 枚举

我从上面了解到的是状态应该只采用EnabledDisabled并且角色也一样。如何设计我的表以确保它只采用这两个值?还有什么办法,例如如果我提供 1 则表示启用,提供 0 表示禁用。

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

最佳答案

您需要使用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

)

对于枚举,您必须在前端处理或从表中检索值时进行处理,这是一个额外的步骤。

SELECT CASE WHEN [User_Status] = 1 THEN 'ENABLED' WHEN [User_Status] = 0 THEN 'DISABLED' END As UserStratus
FROM [dbo].[NCT_UserRegistration]

关于sql - 如何为 SQL 表列分配 2 个默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42082367/

相关文章:

sql - 重命名列 SQL Server 2008

asp.net - ELMAH 登录 SQL Server

sql - postgresql:插入…(选择*…,"fixed value")

SQL Server 更新查询非常慢

java - 数据输入不进入sql数据库

sql-server - SQL Server 不向特定电子邮件地址发送电子邮件

c# - 如何在没有标识列的SQL Server中查找最后插入的行

mysql - 在现有 MYSQL 数据库中使用 Alter Table 添加外键时出现问题 - 无法添加!帮助!

sql-server - SQL Server : Create Nonclustered Index without giving a name to it

sql - 如何在aws athena中追加两个具有不同列的表