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  

また、id表の列はprocess_auditID 列ではありません。

4

1 に答える 1

1

SQL がテーブルに行を挿入した順序をどのように知ることができますか?

クエリを実行select * from process_auditし、行が挿入されたのと同じ順序で表示されることを期待していると思います。これは有効な期待ではありません。

が指定されていない場合、SQL サーバーは順序を保証しませんorder by。また、SQL サーバーは行挿入の順序を維持しません。

返される結果はクラスター化されたインデックス順になる可能性がありますが、それでも保証されません。

Id独自の ID列またはデフォルトの制約を持つ列を追加するCreatedDateTimeと、これは挿入順序のより良い指標になります。

于 2011-05-29T22:09:34.450 に答える