【问题标题】:SQL - Only accept capital letters by constraintSQL - 只接受大写字母的约束
【发布时间】:2018-05-18 17:07:51
【问题描述】:
ALTER TABLE TblPersoon
ADD Geslacht char(1) NULL
CONSTRAINT CKGeslacht CHECK (Geslacht in ('M', 'V'))
当我执行这个查询时,之后仍然可以在 TblPersoon 中名为“Geslacht”的列中插入“m”或“v”。
如何确保只接受大写字母?
我知道我应该能够在 SQL Server Management Studio 中执行此操作,但是在哪里?
【问题讨论】:
标签:
sql
sql-server
constraints
【解决方案1】:
您需要区分大小写的排序规则。您可以通过这种方式定义列,或者在 check 约束中进行定义:
ALTER TABLE TblPersoon
ADD Geslacht char(1) NULL
CONSTRAINT CKGeslacht CHECK (Geslacht collate Latin1_General_CS_AS in ('M', 'V'));
或:
ALTER TABLE TblPersoon
ADD Geslacht char(1) collate Latin1_General_CS_AS
CONSTRAINT CKGeslacht CHECK (Geslacht in ('M', 'V'));
一般来说,整理是一个有点棘手的主题。它涉及不同角色之间的关系。在 SQL Server 中,它似乎也与字符集(“代码页”)混为一谈。我所做的那些基本的事情,比如区分大小写与不区分大小写的比较不需要使用它们。你可以在documentation了解更多。
【解决方案2】:
你可以像这样定义明确的collation:
ALTER TABLE TblPersoon
ADD Geslacht char(1) NULL
CONSTRAINT CKGeslacht CHECK (Geslacht collate SQL_Latin1_General_CP1_CS_AS in ('M', 'V'))
但是,我使用了默认的 collation 区分大小写类型SQL_Latin1_General_CP1_CS_AS,您可以相应地更改它。