【问题标题】:How to make automatic uppercase in column SQL Server [closed]如何在 SQL Server 列中自动大写[关闭]
【发布时间】:2021-05-18 09:36:59
【问题描述】:

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

例如当我插入“mango”然后在列中,SQL Server 会自动显示“MANGO”。

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

【问题讨论】:

  • 您可以使用触发器。例如看这里:bytes.com/topic/sql-server/answers/144862-uppercase-trigger
  • 为什么它“重要”?如果它真的很重要,那么使用计算列作为显示值;那么无论有人为数据列插入什么,'manga','Mango','mANGO','MAngo' 甚至 'MaNgO' 都将在计算列中显示为 'MANGO'
  • 坦率地说-不要。如果您的系统需要一致的字符选择,那么您应该使用约束来强制执行它,并让执行插入/更新的过程(通过错误)知道需要大写。没有什么比在应用程序中做某事并在事后查看 IMO 时看到不同的东西更糟糕的了
  • 是的,不要。选择时使用 UPPER()

标签: sql sql-server uppercase


【解决方案1】:

下面是如何使用触发器来做到这一点。

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

【讨论】:

    【解决方案2】:

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

    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));
    

    【讨论】:

    • 我已经存在列,而不是创建新列。我想让这个存在的列在每次插入数据时都会大写,如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 2010-10-04
    • 1970-01-01
    • 2011-04-08
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多