【问题标题】: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】:

    你可以像这样定义明确的collat​​ion

    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,您可以相应地更改它。

    【讨论】:

    • 这成功了!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2018-06-14
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多