AFTER INSERT中的数据插入的反向顺序触发SQL Server

时间:2013-11-10 05:47:23

标签: sql-server-2008 triggers

我有2张桌子。 CREATE语句如下所示。

create table tab1(id int identity, val varchar(20))
create table tab2(id int identity, val varchar(20))

我在表1中也有一个AFTER INSERT Trigger:

CREATE trigger [dbo].[insertTab2] on [dbo].[tab1]
for insert 
as 
begin
insert into tab2(val)
select val from inserted
end

然后我在表1中执行单个多行插入语句:

insert into tab1 values('a'),('b'),('c')

这个逻辑,现在触发表2中的插入。

table1中的插入顺序为:a,b,c

当我在表1上执行select时,它是:a,b,c

当我在表2上执行select时,它是:c,b,a

为什么在表2中以相反的顺序插入数据? 要按照与表1中相同的顺序插入它们需要做什么?

1 个答案:

答案 0 :(得分:1)

尝试在触发器中添加ORDER BY子句:

CREATE trigger [dbo].[insertTab2] ON [dbo].[tab1]
FOR INSERT
AS 
  BEGIN
    INSERT INTO tab2 (val)
    SELECT val FROM inserted ORDER BY id
  END

如果您未指定order by,则查询结果的排序将是不可预测的;它可能是所需的顺序,也可能不是。