如何在SQL Server列中自动大写

问题描述

我想问一下,有没有可能不更新upper(column_name),让每列插入的数据都大写?

例如,当我将“mango”插入到列中时,sql Server 将自动显示“MANGO”。

如何在插入小写数据时自动设置大写?

解决方法

这里是如何使用触发器执行此操作。

create or alter trigger tg_upper_column_name 
on some_table
after insert,update
as
begin

  set nocount on;

  update some_table
  set column_name = upper(column_name)
  where id in (select id from inserted)
   and column_name <> upper(column_name) collate Latin1_General_100_BIN2;

end
,

我能想到三种方法来解决这个问题:

  1. 使用触发器将值大写。
  2. 只允许列中的大写值,使用检查约束。
  3. 使用视图或计算列生成您想要的结果。

我不喜欢第一种方法,因为通常触发器会使数据库变得复杂。但是,这可能是最好的解决方案。我不喜欢第二个,因为你特别想插入 'mango'

第三个建议视图或计算列。视图将如下所示:

create view v_t as
    select col1,col2,upper(column_name) as column_name
    from t;

然后当您访问视图时,您会看到您想要的东西——尽管底层数据没有改变。您也可以使用计算列执行此操作:

alter table t add column_name_to_view as (upper(column_name));