3
我想如果我能在SQLite的运行下面的过程: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的双打在以下structur的给定表票务一个小程序:
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上有类似的问题。
似乎不重新编号的重复票。删除不是解决方案。还需要在列表中记录旧的ID和新的ID ... – Ice 2009-12-09 22:54:29
好的,现在我知道你在做什么,也许是一个4步的过程:使用上面的where子句将dups插入临时表,如上所述删除dups,将临时表中的dups重新编号并将其插回。 – 2009-12-09 23:02:44
因此,在sqlite中没有游标。 – Ice 2009-12-10 18:56:48