Avatar billede karsten_larsen Praktikant
29. januar 2007 - 20:25 Der er 8 kommentarer og
1 løsning

Værdi med ud fra en løkke i store procedure

Bøvler med at få en løkke til at give et resultat ud for hver runde.

StoreProcdure som bruges:

SP_Demo
@antal [int] OUTPUT

declare @minTableID int, @maxTableID int

-- henter min og max for interval for løkken
SELECT      @minTableID = MIN(NameId), @maxTableID = MAX(NameId)
FROM        [Tabel1]
GROUP BY Active
HAVING      (Active = 1)

-- løkken afvikles
WHILE @minTableID <= @maxTableID
  BEGIN
    Select @antal = count(OrganizationId) From [Tabel2] Where SystemNameId = @minTableID
   
    -- ny værdie for @minTableID
    Select @minTableID = min(NameId) From Tabel1 WHERE NameId>@minTableID
  END

Når SP afvikles får jeg kun det sidste resultat, nemlig for værdien for @maxTableID

Hvordan får jeg listet alle værdier ud?

???:-) karsten_larsen
Avatar billede arne_v Ekspert
29. januar 2007 - 23:42 #1
ja

@antal er jo en skalar

det var nemmeste var nok at lade din SP returnere flere result set

om det er det mest effektive er jeg ikke sikker på
Avatar billede karsten_larsen Praktikant
30. januar 2007 - 05:19 #2
okay - hvordan faar jeg returneret flere resultat set - jeg er paa bar bund der?

Er der noget som er mere smart?

karsten_larsen
Avatar billede arne_v Ekspert
30. januar 2007 - 05:27 #3
Select @antal = count(OrganizationId) From [Tabel2] Where SystemNameId = @minTableID
   
->

Select @minTableID,count(OrganizationId) From [Tabel2] Where SystemNameId = @minTableID

burde faktisk gøre det
Avatar billede arne_v Ekspert
30. januar 2007 - 05:27 #4
(og du kan så stryge parameteren)
Avatar billede arne_v Ekspert
30. januar 2007 - 05:29 #5
jeg kan ikke helt gennemskue logikken, men det ligner et forsøg på at få nuller
ud for dem som ikke er der

og det kunne muligvis løses ved kun at lade en query returnere dem som
der er noget for, men så lade applikationen tilføje de manglende
Avatar billede karsten_larsen Praktikant
30. januar 2007 - 05:51 #6
okay - det prøver jeg. Logikken er (skulle gerne være) at Tabel1 angiver for hvilke værdier der skal laves en sammentælling for i tabel 2. Brugere som er godkendte (Active=1) sammentælles deres data fra en anden tabel. Så et resultat set ser således ud

Bruger 1: 38
Bruger 2: 2
Bruger 5: 0
Bruger 9: 89
etc. håber at det er mere tydeligt
Avatar billede arne_v Ekspert
30. januar 2007 - 05:55 #7
hm - kan det ikke laves med en join af de to tabeller ?
Avatar billede karsten_larsen Praktikant
30. januar 2007 - 11:24 #8
Arne -> lav et svar det var en inner join, som løste det hele
Mange tak for hjælpen
:-) karsten_larsen
Avatar billede arne_v Ekspert
30. januar 2007 - 15:40 #9
svar
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