2011-05-29 137 views
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 

此外,在表process_auditid列不是标识列。

回答

1

你怎么知道SQL向表中插入行的顺序?

我假设你查询select * from process_audit并希望按照插入的顺序查看行。这不是一个有效的期望。

如果未指定order by,SQL服务器不保证任何顺序。 另外,SQL服务器不保持行插入的顺序。

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

如果使用默认约束添加自己的身份Id列或CreatedDateTime列,这将是更好的插入顺序指示器。

+0

谢谢,我会尝试建议的方法来获取插入顺序,因为我需要它。 – Animesh 2011-05-29 22:45:29