Sql-Server
如何使用觸發器中同一新插入行的值更新列?
使用 SQL Server 2014,我有這個:
Table1 Tab1_id int identity(1,1) primary key Tab1_val1 smallint Tab1_val2 smallint Tab1_valInfo varchar(10) -- not yet implemented, will be used only for presentation
Tab1_id | Tab1_val1 | Tab1_val2 | Tab1_valInfo ---------|-------------|-------------|-------------- 1 | 25 | 19 | 0025-0019 2 | 0 | 5 | 0000-0005 3 | 12 | 3 | 0012-0003
現在有了我相當短的 SQL 經驗,我正在嘗試的是:
從插入數據所需的唯一輸入值的應用程序中
Tab1_val1
,Tab1_val2
然後,創建一個更新Tab1_valInfo
列的觸發器。create trigger utr_ValInfo on Table1 after insert as begin declare @size int = 4; declare @valInfo varchar(10) = select right('0000' + convert(varchar, /* insertedRow.Tab1_val1 */), @size) from inserted + '-' + select right('0000' + convert(varchar, /* insertedRow.Tab1_val2 */), @size) from inserted; update Table1 set Tab1_valInfo = @valInfo where /* this is the last inserted row*/; end;
單個插入可能涉及多行。
我希望我想要達到的目標是明確的。
您可以嘗試計算列而不是觸發器,因為它易於修改。試試下面的查詢
create table tab_computed ( Tab1_id int identity(1,1) primary key, Tab1_val1 smallint, Tab1_val2 smallint, Tab1_valInfo as (right('0000' + convert(varchar,Tab1_val1), 4)+ '-' + right('0000' + convert(varchar,Tab1_val2), 4)) ) insert into tab_computed (Tab1_val1,Tab1_val2) values (25,19),(0,5),(12,3) select * from tab_computed
結果集:
嘗試這個
create trigger utr_ValInfo on Table1 after insert as begin declare @size int = 4; UPDATE Table1 SET Tab1_valInfo = right('0000' + convert(varchar, i.Tab1_val1), @size) + '-' + right('0000' + convert(varchar, i.Tab1_val2), @size) FROM Inserted i WHERE Table1.Tab1_id= i.Tab1_id; end;