0

我正在使用一个简单的触发器ins_process来捕获表上的插入/更新process。这ins_process会将数据插入到表中process_audit

process最初按顺序插入了以下数据:

id    name    description
---   ----    -----------
1     proc1   sql
2     proc2   scripting
3     proc3   java

process_audit将按如下方式创建数据:

id    name    description    insert_dt
---   ----    -----------    ---------
3     proc3   java           [a minute ago]
2     proc2   scripting      [a minute ago]
1     proc1   sql            [a minute ago]

为什么记录以相反的顺序插入?当我从前端编辑一行时,里面的数据process_audit如下:

id    name    description    insert_dt
---   ----    -----------    ---------
3     proc3   java           [a minute ago]
2     proc2   scripting      [a minute ago]
1     proc1   sql            [a minute ago]
2     proc2   scripting      [now]

这对我来说不是什么大问题。我想知道这是否是标准行为,或者我创建触发器的方式是否有问题。

这是我创建触发器的方式:

create trigger [dbo].[ins_process]  
on [dbo].[process] for insert, update    
as
set nocount on    
begin    
insert into process_audit
    (id, name, description, insertdate)    
select 
    id, name, description,current_timestamp
from inserted ins    
end  

此外,表中的idprocess_audit不是标识列。

4

1 回答 1

1

您如何知道 SQL 以何种顺序将行插入到表中?

我假设您查询select * from process_audit并希望看到与插入顺序相同的行。这不是一个有效的期望。

order by如果未指定,SQL Server 不保证任何顺序。此外,SQL Server 不维护行插入的顺序。

返回的结果可能会按聚集索引顺序排列,但仍不能保证。

如果您添加自己的标识Id列或CreatedDateTime具有默认约束的列,这将更好地指示插入顺序。

于 2011-05-29T22:09:34.450 回答