Tsql 如何从其他列中的特殊值自动填充列?

Tsql 如何从其他列中的特殊值自动填充列?,tsql,stored-procedures,triggers,Tsql,Stored Procedures,Triggers,我有个小问题,我有一张这样的桌子 ref_id |ref_name | ref_Type | ref_debit 1 |BVPG Corporate 2M Spain | | 2 |BVPG Small 5M 54FZE | | 3 |BVPG Corporate 1M Spain | | 我想自动填写列ref_type和ref de

我有个小问题,我有一张这样的桌子

ref_id |ref_name                 | ref_Type     | ref_debit
1      |BVPG Corporate 2M Spain  |              |
2      |BVPG Small 5M 54FZE      |              |
3      |BVPG Corporate 1M Spain  |              |
我想自动填写列ref_type和ref debit。
我手动创建了一个子字符串(只是我许多查询的一部分)

如果是BVPG公司或小型公司,我有类似的产品

ref_id |ref_name                 | ref_Type     | ref_debit
1      |BVPG Corporate 2M Spain  | Corporate    | 2M
2      |BVPG Small 5M 54FZE      | Small        | 5M
3      |BVPG Corporate 1M Spain  | Corporate    | 1M
这就是我想要的,我知道怎么做。 但我希望在有新行时自动生成此结果。
我考虑过触发器,但我使用的是SQLServerManagementStudio,我不知道该怎么做,甚至不知道触发器是否是最好的解决方案

我尝试过类似的方法,但不起作用(所有行都会更新,即使它以“BVPG C”开头)


不要使用触发器-您需要一个计算列(请参阅)。因此,请删除列并再次添加它们:

ALTER TABLE ref_table
ADD ref_type AS substring(ref_name,charindex(' ', ref_name) + 1, charindex(' ', ref_name, charindex(' ', ref_name) + 1) - charindex(' ', ref_name) - 1)
对ref_借方执行类似操作


虽然您最好在应用程序中执行这种字符串操作,而不是在数据库中执行…

我明白了,谢谢,我会尝试的。但是,如果我决定在我的应用程序中包含此操作,这不会降低我的应用程序的性能?这取决于您如何使用计算列。如果您打算使用这些值执行搜索,甚至可能为列编制索引,那么通过SQL以这种方式进行搜索是值得的。但是,如果您只是为了显示这些值而将它们分开,那么最好使用具有更好字符串操作性能和功能的语言进行操作。
    if exists(
        select ref_name
        from inserted
        where ref_name like 'BVPG S%')   
      then update
ALTER TABLE ref_table
ADD ref_type AS substring(ref_name,charindex(' ', ref_name) + 1, charindex(' ', ref_name, charindex(' ', ref_name) + 1) - charindex(' ', ref_name) - 1)