Aanpassen duplicate records met cursor (MS SQL Server)

Status
Niet open voor verdere reacties.

s5057285

Gebruiker
Lid geworden
16 mrt 2010
Berichten
104
In een vrij grote database ben ik aan het proberen duplicaten records op te sporen zodat ik eindelijk mijn clustered PK kan vastleggen.

De duplicaten records mogen niet verwijderd worden maar moeten worden aangepast in de hoop dat ze dan niet meer duplicaat zijn.
Dit probleem probeer ik dus op te lossen met een cursor.

[SQL]
--Get rid off f*cking the Duplicate keys...
DECLARE @item float
DECLARE @teller float

SET @teller = 10

DECLARE sodiac_cursor CURSOR
FOR SELECT [Higher-Level Item of BS] FROM DL
GROUP BY Delivery, [System Client number], [Delivery line], [Higher-Level Item of BS]
HAVING COUNT(*) > 1
FOR UPDATE OF [Higher-Level Item of BS]

BEGIN
OPEN sodiac_cursor
FETCH NEXT FROM sodiac_cursor INTO @item
WHILE @@FETCH_STATUS >= 0
BEGIN

UPDATE DL
SET [Higher-Level Item of BS] = @teller
WHERE CURRENT OF sodiac_cursor

SET @teller = @teller + 1

FETCH NEXT FROM sodiac_cursor INTO @item
END

CLOSE sodiac_cursor
DEALLOCATE sodiac_cursor
END
GO
[/SQL]

Na het uitvoeren van dit script geeft hij de volgende foutmelding:
Code:
Msg 16929, Level 16, State 1, Line 19
The cursor is READ ONLY.
The statement has been terminated.

I'm looking forward to your answers...

Kind Regards ^^

Joey
 
Group by / having in combinatie met for update mag niet. Eén rij uit de cursor is altijd gebaseerd op twee of meer rijen in de tabel. Hierdoor wordt is voor de database niet te bepalen welke van de twee rijen je wilt updaten en wordt de cursor read-only. bron Hoe je dit precies aan moet passen weet ik niet, heb geen ervaring met mssql, maar hopelijk kun je hier verder mee.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan