You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server如何让CHECK约束仅接受大写字母?SSMS操作位置咨询

解决Geslacht列仅接受大写字母的问题

嗨,我来帮你搞定这个问题~ 首先咱们先搞明白为什么原来的约束不起作用:SQL Server默认的排序规则大多是不区分大小写的(比如常见的Latin1_General_CI_ASCI就是Case-Insensitive的意思),所以小写的'm'/'v'会被识别成和大写'M'/'V'等价,导致原来的CHECK约束拦不住它们。下面分两种方式解决:

一、通过SQL语句修改约束

你可以直接修改CHECK约束,强制让输入值转成大写后再判断,或者指定区分大小写的排序规则来做比较:

方法1:强制转换为大写判断

ALTER TABLE TblPersoon 
ADD Geslacht char(1) NULL 
CONSTRAINT CKGeslacht CHECK (UPPER(Geslacht) IN ('M', 'V'))

这个方法会把插入的字符先转成大写,再和'M'/'V'比对,不管输入的是大写还是小写,只有转成大写后符合的才能通过。

方法2:指定区分大小写的排序规则

ALTER TABLE TblPersoon 
ADD Geslacht char(1) NULL 
CONSTRAINT CKGeslacht CHECK (Geslacht COLLATE Latin1_General_CS_AS IN ('M', 'V'))

这里的Latin1_General_CS_AS是区分大小写(CS=Case-Sensitive)和重音的排序规则,用它来做比较时,只有严格匹配大写的'M'/'V'才能通过。

二、在SQL Server Management Studio(SSMS)里图形化设置

如果你习惯用界面操作,步骤如下:

  1. 打开SSMS,找到你的目标数据库,展开后找到TblPersoon表,右键点击它,选择设计(Design),进入如下界面:
    SSMS表设计界面
  2. 设置列的排序规则(可选,让列本身区分大小写)
    • 选中Geslacht列,在界面下方的「列属性」面板里,找到「排序规则」选项,点击下拉框,选择一个以CS结尾的排序规则(比如Latin1_General_CS_AS)。
  3. 设置CHECK约束
    • 在表设计界面的空白处右键,选择CHECK约束(Check Constraints)。
    • 在弹出的窗口里点击「添加」,然后在「表达式」输入框里填写:
      UPPER(Geslacht) IN ('M', 'V')
      
      或者如果你已经给列设置了区分大小写的排序规则,也可以直接填:
      Geslacht IN ('M', 'V')
      
    • 可以在「名称」栏给约束起个清晰的名字(比如CKGeslacht_UpperOnly),然后点击「确定」。
  4. 最后点击工具栏的保存按钮(或者按Ctrl+S),保存对表的修改。

这样设置后,就只能向Geslacht列插入大写的'M'或'V'啦~

内容的提问来源于stack exchange,提问作者SaraD

火山引擎 最新活动