SQL - 通过约束只接受大写字母

3
ALTER TABLE TblPersoon
    ADD Geslacht char(1) NULL
    CONSTRAINT CKGeslacht CHECK (Geslacht in ('M', 'V'))
当我执行这个查询之后,仍然可以在TblPersoon表的“Geslacht”列中插入“m”或“v”。如何确保只接受大写字母? 我知道我应该能够在SQL Server Management Studio中实现这一点,但在哪里?

enter image description here

2个回答

3
您可以像这样定义显式的排序规则:

collation

ALTER TABLE TblPersoon
ADD Geslacht char(1) NULL
CONSTRAINT CKGeslacht CHECK (Geslacht collate SQL_Latin1_General_CP1_CS_AS in ('M', 'V')) 

然而,我使用了默认的排序规则区分大小写类型SQL_Latin1_General_CP1_CS_AS,您可以根据需要进行更改。


这个完成了任务!谢谢。 - SaraD

3

您需要一个区分大小写的排序规则。您可以在该列上定义,或在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中,它似乎也与字符集(“代码页”)混淆在一起。我希望基本的事情,如区分大小写和不区分大小写的比较,不需要使用它们。您可以在文档中了解更多信息。


非常感谢您的解释! - SaraD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,