我试图像在MySQL中那样创建一个枚举
USE WorldofWarcraft;
CREATE TABLE [users]
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
username varchar(255),
password varchar(255),
mail varchar (255),
rank ENUM ('Fresh meat', 'Intern','Janitor','Lieutenant','Supreme being')DEFAULT 'Fresh meat',
);
Run Code Online (Sandbox Code Playgroud)
但是,我发现这在SQL Server中是不可能的,所以我的问题是,如何解决这个问题?
我已经看过这篇文章
建议类似
mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
Run Code Online (Sandbox Code Playgroud)
但是,我也无法正常工作,我将如何创建默认值?
最好的祝福。
编辑:枚举的目的是要在该站点上有一个下拉列表,公会主持人可以在该站点上设置某人的等级。用户创建帐户时,默认等级为“鲜肉”。
Ivi*_*x4u 12
SQL Server中没有像MySQL中那样可用的枚举数据类型。
但使用CHECK约束枚举功能是可以实现的。
USE WorldofWarcraft;
CREATE TABLE [users]
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
username nvarchar(255),
password nvarchar(255),
mail nvarchar (255),
[rank] nvarchar (255) NOT NULL CHECK ([rank] IN('Fresh meat', 'Intern','Janitor','Lieutenant','Supreme being')) DEFAULT 'Fresh meat'
);
Run Code Online (Sandbox Code Playgroud)
最好适当地规范模型:
create table user_rank
(
id integer primary key, -- no identity, so you can control the values
rank varchar(20) not null unique
);
insert into user_rank (id, rank)
values
(1, 'Fresh Meat'),
(2, 'Intern'),
(3, 'Janitor'),
(4, 'Lieutenant'),
(5, 'Supreme being');
CREATE TABLE [users]
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
username varchar(255),
password varchar(255),
mail varchar (255),
rank integer not null default 1,
constraint fk_user_rank foreign key (rank) references user_rank (id)
);
Run Code Online (Sandbox Code Playgroud)
您可以通过查询user_rank
表轻松地填充网站上的下拉列表。