如何使用触发器中新插入的同一行的值更新列?

Shi*_*hin 1 trigger sql-server update sql-server-2014

使用 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
Run Code Online (Sandbox Code Playgroud)
 Tab1_id |   Tab1_val1 |   Tab1_val2 | Tab1_valInfo
---------|-------------|-------------|--------------
       1 |          25 |          19 | 0025-0019
       2 |           0 |           5 | 0000-0005
       3 |          12 |           3 | 0012-0003
Run Code Online (Sandbox Code Playgroud)

现在,凭借我相当短的 SQL 经验,我正在尝试的是:

在应用程序中,插入数据所需的唯一输入值是Tab1_val1Tab1_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;
Run Code Online (Sandbox Code Playgroud)

一次插入可能涉及多行。

我希望我想要实现的目标是明确的。

vij*_*ayp 6

尝试这个

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;
Run Code Online (Sandbox Code Playgroud)

并且不要在convert中声明没有长度的varchar