2011-05-29 141 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