Avatar billede mothor Nybegynder
14. december 2001 - 01:07 Der er 7 kommentarer

delete med cursor??

Jeg har en tabel ordre, hvor jeg skal finde nogen ordre som er udløbet, dernæst skal jeg slette ordrelinierne som høre til ordren til sidst skal jeg slette den pågældende ordre
jeg har prøvet med cursor men kan kun read only
hvordan delete????

Avatar billede tmceu Praktikant
14. december 2001 - 07:34 #1
Er det ikke fordi du har brugt en READ_ONLY Cursor ?

Cursors er noget af det mest performance krævende- og farlige i en OLTP database. Prøv at vise den kode du bruger, den kan sandsynligvis omskrives til ikke at bruge cursor eller i det mindste oprimeres...
Avatar billede bennytordrup Nybegynder
14. december 2001 - 08:33 #2
Ville det ikke være nemmere med en DELETE SQL?
Avatar billede tmceu Praktikant
14. december 2001 - 11:08 #3
benny >> det er præcis det jeg mener med at den sandsynligvis kan omskrives til ikke at bruge cursor :-) Men det er nemmere at forklare hvis vedkommende viser sin kode.
Avatar billede klix Nybegynder
07. januar 2002 - 12:17 #4
tmceu har ret direkte cursor programmering er noget snask, eller kan blive til det, hvis man ikke holder tungen lige i munden. Så her er mit foreslag, da jeg ikke kender din DB opbygning, laver jeg et tænkt eks. her:

Design eksempel på to tabeller en med ordre data og en med ordrelineje data
(PS: har udelukket alle ikke relavante data):

[Orders]
uID

[Orderlines]
uID
Orders_uID    = [Orders].uID

Lave et script der første sletter ordre linjerne udfra den givne dato (i dette tilælde expDate):

DELETE FROM OrderLines
WHERE Orders_uID in (SELECT uID FROM Orders WHERE ORDER_DATE <= ExpDate)

Herefter slettes selve ordrene:
SELECT uID FROM Orders WHERE ORDER_DATE <= ExpDate

Dette kan gøres fra en Stored Procedure, hvor der kan overføres ExpDato som parameter.
Avatar billede bennytordrup Nybegynder
07. januar 2002 - 12:37 #5
Der er nok en, som vil tjene nemme points :-)
Avatar billede klix Nybegynder
10. januar 2002 - 16:22 #6
Ups den sidste smuttede :-P
SELECT uID FROM Orders WHERE ORDER_DATE <= ExpDate
skulle ha\' været:
DELETE FROM Orders WHERE ORDER_DATE <= ExpDate
istedet for.
Avatar billede dargny Nybegynder
19. februar 2002 - 11:02 #7
for at svare på dit spørgsmål

DECLARE load CURSOR
FOR select a,b,c
FROM lin_tmp

DECLARE
@a varchar(50),
@b varchar(8),
@c varchar(3)

OPEN faklinload

FETCH NEXT FROM load
into @a,@b,@c

WHILE @@FETCH_STATUS = 0
BEGIN

delete from kartotek
where ordrenr = @a

FETCH NEXT FROM load
into @a,@b,@c

END

Håber du kan forstå dette lille skriv uden forklaringer.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester