Avatar billede kronsj Nybegynder
12. marts 2009 - 11:35 Der er 4 kommentarer

Minimér antal variabler i cursor fetch

Jeg har den opfattelse, at det kan være en fordel hvis man kunne undgå flere lokale variabel-ærklæringer, når man skulle fetche i et cursor-loop.
I nogle SQL-sprog (bl.a. Oracle) har man variabler af type ROWTYPE, så man kun behøves en variable for en hel række, og i selve cursor-loopet så kan referere ned i den enkelte kolonne, lidt a'la dette:


DECLARE @MyRow ROWTYPE
// jeg ved godt ROWTYPE findes ikke i MS SQL ;-)   
DECLARE MyCur CURSOR READ_ONLY
FOR
SELECT FirsName, LastName
FROM PhoneBook

OPEN MyCur

FETCH NEXT FROM MyCur
INTO @MyRow
WHILE @@FETCH_STATUS = 0
BEGIN

    PRINT @MyRow.FirstName
    FETCH NEXT FROM MyCur
    INTO @MyRow
END

CLOSE MyCur
DEALLOCATE MyCur


Dette er et MEGET simpelt pseudo-ekesempel, men selve cursor loopet skal både køre hurtigt og hyppigt, og der indgår betydeligt flere variabler, end Fornavn og Efternavn, og der sker en hel del mere i selve cursor-loopet.

Så kort fortalt: Kan man undgå at skulle erklære en variabel for hver kolonne man fetcher?
Avatar billede keysersoze Guru
12. marts 2009 - 11:53 #1
hvis det skal køre hurtigt og hyppigt så kig på integration services - en cursor er generelt alt for langsom.
Avatar billede arne_v Ekspert
13. marts 2009 - 01:09 #2
1)  Jeg tror ikke at assignment til flere variable vil være flaskehalsen i din SP.

2)  Det bedste ville være hvis du kunne omskrive så du ikke har brug for cursors evt. ved at flytte logik op i applikationen.

3)  Alternativt så flyt applikationen ned i SP ved at lave din SP i C#/VB.NET.
Avatar billede kronsj Nybegynder
13. marts 2009 - 10:58 #3
KeyserSoze:
integration services lyder meget spændende, men det bliver ikke i denne version jeg kommer til at bruge det.
Arne_V:
Jeg overvejer også kraftigt at flytte logikken ned på applikationen, specielt efter (skuffet) at have opserveret MS SQL cursor-performance i forhold til bl.a. Oracle
Avatar billede kronsj Nybegynder
24. marts 2009 - 15:53 #4
Logistikken blev lagt på klientniveauet og implementeret via en COM+ løsning. Er nu lidt skuffet over MS-SQL ydelse på en så elementær del i SQL-sproget, i forhold til Oracles hastighed.
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