2016-03-02 108 views
0

我有一個小問題,我有這樣的如何從其他列中的特殊值自動填充列?

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借方。
手動我不喜歡(只是我的許多查詢的一部分)

UPDATE t 
SET t.ref_type = (substring(t.ref_name,6,10)) 
FROM ref_table t 
INNER JOIN ref_table t1 on t1.ref_id = t.ref_id AND t1.ref_name LIKE'BVBG C%' 

子字符串,如果它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 

這就是我想要的東西,我知道該怎麼做。 但我想在自己有新行時自動做出這個結果。
我想過觸發器,但我正在使用SQL Server Management Studio我沒有關於如何做的想法,我甚至不知道觸發器是否是最佳解決方案。

我嘗試類似的東西,但它

if exists(
     select ref_name 
     from inserted 
     where ref_name like 'BVPG S%') 
     then update 

回答

0

不要使用觸發器不工作(即使它與「BVPG C」開頭的所有行被更新) - 你需要一個計算列(見MSDN )。因此刪除您的列並重新添加它們:

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_debit做類似的操作。

雖然你會更好做這種字符串操作的應用程序而不是數據庫...

+0

我知道了,謝謝,我會嘗試。但是如果我決定在我的應用程序中包含這個操作,那不會減慢我的應用程序的性能? – miewer

+0

這取決於您如何使用計算列。如果您要使用這些值執行搜索,甚至可能會對列進行索引,那麼通過SQL以這種方式執行此操作是值得的。但是,如果您只是將它們拆分以顯示這些值,那麼使用具有更好的字符串操作性能和功能的語言進行操作將是更可取的。 – strickt01