我使用简单的触发器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
此外,表id
中的process_audit
列不是标识列。
答案 0 :(得分:1)
你怎么知道SQL在表中插入行的顺序是什么?
我假设您查询select * from process_audit
并期望按插入顺序查看行。这不是一个有效的期望。
如果未指定order by
,SQL Server不保证任何订单。
此外,SQL Server不维护行插入的顺序。
可能返回的结果将按聚集索引顺序排序,但仍无法保证。
如果您使用默认约束添加自己的标识Id
列或CreatedDateTime
列,这将是插入顺序的更好指示。