0

私は2つのテーブルを持っています。CREATE ステートメントを以下に示します。

create table tab1(id int identity, val varchar(20))
create table tab2(id int identity, val varchar(20))

表 1 に AFTER INSERT トリガーもあります。

CREATE trigger [dbo].[insertTab2] on [dbo].[tab1]
for insert 
as 
begin
insert into tab2(val)
select val from inserted
end

次に、表 1 の単一の複数行挿入ステートメントを実行します。

insert into tab1 values('a'),('b'),('c')

これにより、テーブル 2 への挿入がトリガーされます。

table1 の挿入順序は、a、b、c で​​した。

テーブル1で選択を実行すると、次のようになります:a、b、c

テーブル2で選択を実行すると、c、b、aです

表 2 でデータが逆の順序で挿入されているのはなぜですか? それらを表 1 と同じ順序で挿入するには、何をする必要がありますか?

4

1 に答える 1

1

ORDER BYトリガーに句を追加してみてください。

CREATE trigger [dbo].[insertTab2] ON [dbo].[tab1]
FOR INSERT
AS 
  BEGIN
    INSERT INTO tab2 (val)
    SELECT val FROM inserted ORDER BY id
  END

クエリ結果の順序を指定しないorder byと、予測できなくなります。希望の順序になっている場合とそうでない場合があります。

于 2013-11-10T06:37:09.923 に答える