0

宛先テーブルのシーケンス番号フィールドの最大数を増やしながら、テーブルに挿入されたすべての行の一部の列を別のテーブルに転送するトリガーを作成したいと考えています。このフィールドは自動インクリメントではありませんが、主キー フィールドです。

私が行っていたのは、宛先テーブルで最大シーケンス番号を見つけ、インクリメントしてから新しい値を挿入することでした。データが一度に行ごとに挿入される場合、これはうまくいきました。しかし、1 つのクエリから多くの行が挿入された場合、シーケンス番号をインクリメントするにはどうすればよいでしょうか? サンプルの問題は次のとおりです。

insert into [mssql].mssql.dbo.destination_table (name,seq_no)
select name,?
from inserted

一度に数千行を挿入することもできます。

seq_no は複合主キーの一部です。たとえば、データが別の名前で挿入された場合、seq_no は異なります。(この要件は、主キーの一部を考慮せずに seq_no をインクリメントできる場合に考慮する必要があります)

4

1 に答える 1

0

さて、私はあなたの問題を理解しました、これを試してください

insert into [mssql].mssql.dbo.destination_table (name,seq_no)
select name, x.MaxSeq + row_number() over (order by name)
   from inserted, (select Max(seq_no) As MaxSeq From source_table) x
于 2012-05-04T01:39:04.247 に答える