作成日時にrow_number関数を使用します。バッチを挿入している場合は、row_number関数のidカラムを使用して注文することもできます。
declare @records table (id int identity(1,1), CreationDate datetime, Name varchar(50), Section char(1), FileID varchar(10))
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:57:49', 'abc','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:57:50', 'def','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:00', 'ghi','c'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:50', 'jkl','d'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:51', 'mno','c'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:52', 'pqr','p'
insert into @records (CreationDate, Name, Section)
select '2011-01-26 16:58:53', 'def','p'
update @records
set FileID=a.FileID
from
(
select id,
Section + cast(row_number() over (partition by Section order by CreationDate, Section) as varchar(10)) as FileID
from @records
) a
inner join @records b
on a.id=b.id
select * from @records
「順次」アスペクトはどれくらい重要ですか?失敗したインサートによって左に隙間ができますか? –
残念なことに本当に重要です - ファイルがストレージから紛失した場合(アーカイブが常時取り込まれた後に)、物理的に簡単に識別できるようになります。明らかに、数字が間違っていれば、わかりませんファイルが見つからないか番号が割り当てられていない場合 –
「ID」が完全に排除されていれば、これはまったく保証されません(3つの異なるテーブルを持っていてもロールバックされたトランザクションとのギャップが残る可能性があります) –