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:
I'm looking forward to your answers...
Kind Regards ^^
Joey
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