我在哪里可以在 SSMS 表设计器模式中设置检查约束

Leb*_*n11 5 sql sql-server ssms

所以这里我有一张桌子:

在此处输入图片说明

我想要的是在上面的设计器模式中为列 SessionState 添加一个检查约束,以便它可以像枚举一样工作。但不幸的是,我找不到可以做到这一点的地方。

我也试过“ right click -> script table as-> create table”,但在这里我无法进行非空检查:

在此处输入图片说明

DxT*_*xTx 3

右键单击SessionState并选择Check Constraints...
然后添加约束。

在此输入图像描述

或者 选择dbo.Table > Constraints > New Constraints... > Expression (under General)然后输入您的表达式。

([SessionState]='Unknown' OR [SessionState]='Useless' OR [SessionState]='Useful')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述
Img 全尺寸:https://i.stack.imgur.com/AvgJX.png

在此输入图像描述
Img 全尺寸:https://i.stack.imgur.com/HMsEK.png

或者只需输入此代码

Alter Table TableName
ADD CONSTRAINT Constraint_name Check (SessionState IN ('Useful', 'Useless', 'Unknown'))
Run Code Online (Sandbox Code Playgroud)

更新

(备份所有数据)

运行此查询并获取所有空值和不支持的值。然后,更改它们(更改SessionState值)。

Select * from [Session] WHERE SessionState IS NULL OR SessionState NOT IN ('Useful', 'Useless', 'Unknown')
Run Code Online (Sandbox Code Playgroud)

要更改,请使用此查询...

UPDATE [Session] SET SessionState='Unknown' WHERE SessionState IS NULL

UPDATE [Session] SET SessionState='Unknown' WHERE SessionState NOT IN ('Useful', 'Useless', 'Unknown')
Run Code Online (Sandbox Code Playgroud)

更改值后再次执行第一步。

然后运行这些查询...

Alter Table Session
ALTER COLUMN SessionState nchar(40) NOT NULL

Alter Table Session
ADD CONSTRAINT Constraint_name Check (SessionState IN ('Useful', 'Useless', 'Unknown'))
Run Code Online (Sandbox Code Playgroud)

演示: http: //rextester.com/TGW65894

有关更多信息,请参阅此视频:https://youtu.be/9Zj5ODhv0b0