Sql server 2012 在SQL Server中添加仅大写字母约束

Sql server 2012 在SQL Server中添加仅大写字母约束,sql-server-2012,Sql Server 2012,我希望Position只接受大写字母。要添加哪个约束 create table EmployeeStatistics ( EmployeeIdNo int, Name varchar(30), Salary integer, Benefits integer, Position varchar(25), Allowance integer, DateOfBirth integer,

我希望
Position
只接受大写字母。要添加哪个约束

create table EmployeeStatistics  
(  
     EmployeeIdNo int,  
     Name varchar(30),  
     Salary integer,  
     Benefits integer,  
     Position varchar(25),  
     Allowance integer,   
     DateOfBirth integer,  
     Telephone integer,     
     primary key (EmployeeIdNo)  
);

实际上,我不会添加一个仅接受大写的约束,而是研究一个简单的触发器来强制它使用大写

当数据库用户输入小写字母时,如果可以很容易地修复而不丢失信息,那么就没有什么必要去烦扰他们。有些人不喜欢对数据进行无声的更改,但我一直认为,如果这种行为得到了很好的宣传,那么最好不要产生不必要的错误

这将是类似于:

alter table EmployeeStatistics
#add constraint
要创建触发器和一次性触发器,请执行以下操作:

CREATE TRIGGER UpperPosition ON EmployeeStatistics
FOR INSERT, UPDATE AS
    UPDATE T SET T.Position=Upper(T.Position)
    FROM EmployeeStatistics T
    INNER JOIN inserted I ON (T.ID = I.ID)
更改所有当前行


如果您有任何使用该列的外键约束,请小心,将其大写可能会破坏约束。

您可以使用检查约束,将值与使用二进制排序规则或区分大小写排序规则的值进行比较

UPDATE EmployeeStatistics
SET Position = Upper(Position)

@Farhaan这是强制它使用大写的代码。两个例子都有。你为什么不接受这些完美的答案呢?因为你特别要求一个约束——这是公认的答案。尽管下面的回答中提出的观点可能是一个合理的担忧。这两个答案都很好。
alter table dbo.EmployeeStatistics 
  add constraint CK_EmployeeStatistics_Position
  check (upper(Position) = Position collate Latin1_General_BIN2)