0

我有 2 张桌子。下面提供了 CREATE 语句。

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

我在表 1 中还有一个 AFTER INSERT 触发器:

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 上执行选择时。它是:a,b,c

当我在表 2 上执行选择时。它是:c、b、a

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

4

1 回答 1

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查询结果的顺序,则将是不可预测的;它可能是所需的顺序,也可能不是。

于 2013-11-10T06:37:09.923 回答