问题描述
我想问一下,有没有可能不更新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
,
我能想到三种方法来解决这个问题:
- 使用触发器将值大写。
- 只允许列中的大写值,使用检查约束。
- 使用视图或计算列生成您想要的结果。
我不喜欢第一种方法,因为通常触发器会使数据库变得复杂。但是,这可能是最好的解决方案。我不喜欢第二个,因为你特别想插入 '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));