SQLiteで次の手順を実行できるかどうか疑問に思います:
set nocount on
select T.ID, max(T.SerialNo) as SerialNo
into #Tmp_Ticket_ID
from Ticket as T, Ticket as inserted
where t.ID = inserted.ID
group by T.id having count(*) > 1
declare zeiger cursor for
select SerialNo
from #Tmp_Ticket_ID
declare @SerialNo int
OPEN Zeiger
FETCH NEXT FROM zeiger INTO @SerialNo
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
update T
set ID = (select max(id) + 1 from Ticket)
from ticket AS T, #Tmp_Ticket_ID as I
where t.serialNo = i.serialno
and I.Serialno = @SerialNo
END
FETCH NEXT FROM zeiger INTO @SerialNo
END
CLOSE Zeiger
DEALLOCATE Zeiger
DROP TABLE #Tmp_Ticket_ID
これは、ms-sql2000 からの小さな手順であり、次の構造の特定のテーブル チケットで Ticket_id の double を消去します。
create table Ticket (serialNo int identity(1,1) not null
, ID as int not null
, Ticket_issue as varchar(50)
, some_more_field varchar(500))
異なるデータベースからの単純なマージにより、ticket_id は一意ではなくなります。これを再番号付けして修正するために、この手順を開発しましたが、SQLite-db で同様の問題が発生しています。