我有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中相同的顺序插入它们需要做什么?
答案 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
,则查询结果的排序将是不可预测的;它可能是所需的顺序,也可能不是。