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

Far*_*aan 3 sql-server-2012

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

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

alter table EmployeeStatistics
#add constraint
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 6

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

当您的数据库用户输入小写字母时,如果可以很容易地修复它而不会丢失信息,那么惹恼他们的数据库用户是没有意义的。有些人不喜欢对数据进行静默更改,但我一直认为,如果行为得到充分宣传,最好不要产生不必要的错误。

这将是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

创建触发器和一次性:

UPDATE EmployeeStatistics
SET Position = Upper(Position)
Run Code Online (Sandbox Code Playgroud)

更改所有当前行。

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

  • @Farhaan 这是强制其大写的代码。两个例子。为什么您不接受这些完美的答案? (2认同)

Mik*_*son 5

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

alter table dbo.EmployeeStatistics 
  add constraint CK_EmployeeStatistics_Position
  check (upper(Position) = Position collate Latin1_General_BIN2)
Run Code Online (Sandbox Code Playgroud)