SQL - 仅按约束

时间:2018-05-18 17:07:52

标签: sql sql-server constraints

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

当我执行此查询时,之后仍然可以插入' m'或者' v'在名为' Geslacht'在TblPersoon。 我怎样才能确保只接受大写字母?

我知道我应该可以在SQL Server Management Studio中执行此操作,但在哪里?

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以像这样定义显式的整理

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

但是,我使用了默认的 collat​​ion 区分大小写的类型SQL_Latin1_General_CP1_CS_AS,您可以相应地更改它。

答案 1 :(得分: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中,它似乎也与字符集混合在一起("代码页")。我做了哪些基本的事情,如区分大小写和不区分大小写的比较不需要使用它们。您可以在documentation中了解有关它的更多信息。