【问题标题】:T SQL CHECK Constraint to allow uppercase set of valuesT SQL CHECK 约束以允许大写的值集
【发布时间】:2013-12-31 00:55:40
【问题描述】:

我必须在 SQL Server 中使用检查约束创建一个表,以仅允许大写值集

我的代码如下:

CREATE TABLE Client(
    clientID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName VARCHAR(30) NOT NULL,
    LastName VARCHAR(30) NOT NULL,
    StreetAddress VARCHAR(50),
    Suburb VARCHAR(25),
    State VARCHAR(4) CHECK (state in ('QLD', 'NSW', 'VIC', 'TAS', 'SA', 'WA', 'NT', 'ACT')),
    PhoneNumber VARCHAR(10)
);

请检查错误并帮助我

【问题讨论】:

  • 你得到什么错误信息??
  • 我认为没有任何错误。我猜排序规则不区分大小写并允许输入小写字符串,例如qld.
  • 没有错误,但如果我尝试将小写状态(例如:qld)插入到表中。我想停止

标签: sql sql-server tsql check-constraint


【解决方案1】:

默认情况下,SQL Server 不区分大小写。您可以通过应用区分大小写的排序规则将列定义为区分大小写:

declare @t table (state varchar(4) check (state in ('ok', 'computer')))
insert @t values ('OK') -- No error, case insensitive by default
go
declare @t table (state varchar(4) collate SQL_Latin1_General_CP1_CS_AS 
    check (state in ('ok', 'computer')))
insert @t values ('OK') -- The INSERT statement conflicted with the CHECK constraint

注意 SQL_Latin1_General_CP1_CS_AS 中的 CS,它代表区分大小写。 AS 代表 Accent Sensitive。

【讨论】:

  • 或者,您可以将列保留为不区分大小写并使约束区分大小写:check (state collate SQL_Latin1_General_CP1_CS_AS in ('ok', 'computer'))
【解决方案2】:
CREATE TABLE Client(
    clientID INT IDENTITY(1,1) PRIMARY KEY,
    FirstName VARCHAR(30) NOT NULL,
    LastName VARCHAR(30) NOT NULL,
    StreetAddress VARCHAR(50),
    Suburb VARCHAR(25),
    State VARCHAR(4) CHECK (state in ('QLD', 'NSW', 'VIC', 'TAS', 'SA', 'WA', 'NT', 'ACT')) COLLATE SQL_Latin1_General_CP1_CS_AS ,
    PhoneNumber VARCHAR(10)
);

【讨论】:

    猜你喜欢
    • 2021-07-20
    • 2014-07-18
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多