Avatar billede thomas_n Nybegynder
16. januar 2010 - 22:26 Der er 7 kommentarer og
1 løsning

User defined function og returnering af recordset

Hej,

Jeg har brug for at få returneret et recordset i en streng fra en user defined function.

Jeg bruger en 3. part application der kun kan returnere TOP 1 fra et recordset og har jeg brug for at returnere x antal records. Derfor prøver jeg at bruge en UDF der returnere en streng.

Er der nogen der kan hjælpe med en user definded funtion der returnerer recordsettet i en streng?

Det er feltet ErrorDescription jeg har brug for at få returneret og der kan være flere records i tabellen, der matcher kriteriet 'PENDING'

Jeg har prøvet nedenstående, men uden held.

SELECT @Records = @Records + ErrorDescription
FROM Alarm
WHERE CurrentStatus='PENDING'

V.h.
Thomas
Avatar billede janus_007 Nybegynder
16. januar 2010 - 23:10 #1
Du er tæt på selv, du mangler en isnull eller coalesce:


SELECT @Records = isnull(@Records, '') + isnull(ErrorDescription, '')
FROM Alarm
WHERE CurrentStatus='PENDING'
Avatar billede janus_007 Nybegynder
16. januar 2010 - 23:11 #2
Og så til sidst:
select @Records
Avatar billede thomas_n Nybegynder
16. januar 2010 - 23:22 #3
Hej janus_007

Det hjalp på resultatet :)

Jeg har stadig et lille problem, måske det kun er kosmetisk, men queryen returnere lige så mange records som der findes i tabellen..!
I skrivende stund har jeg kun 2 records, der matcher kriteriet 'PENDING'

/Thomas
Avatar billede janus_007 Nybegynder
17. januar 2010 - 12:12 #4
Det kan ikke passe, where vil stadig blive eksekveret :)
Avatar billede thomas_n Nybegynder
17. januar 2010 - 15:27 #5
Du har ret. Jeg havde lavet en fejl.

Tak for hjælpen.

Sender du et svar.
Avatar billede Syska Mester
17. januar 2010 - 15:43 #6
og hvad blev den endelig query så ... bare for at slå det fast med 10" søm ... :-)

Kunne ske jeg fik brug for det en dag ... man ved aldrig.

mvh
Avatar billede janus_007 Nybegynder
17. januar 2010 - 16:41 #7
Den endelige er velsnildt stadig denne:
SELECT @Records = isnull(@Records, '') + isnull(ErrorDescription, '')
FROM Alarm
WHERE CurrentStatus='PENDING'

select @Records

Det er forøvrigt en fin måde at gå fra et normaliseret design til en string, det hænder jo at man skal vise alle selectede værdier (som jo naturligvis er opbevaret korrekt 1:n), og så er det jo lækkert at kunne trække dem pænt kommasepareret med ud alá:

SELECT @Records = isnull(@Records, '') + ', ' + isnull(ErrorDescription, '')
FROM Alarm
WHERE CurrentStatus='PENDING'

select @Records
Avatar billede Syska Mester
17. januar 2010 - 16:53 #8
Ja, men Business logic hører bare ikke til i databasen.

Men hvis man ikke kan komme uden om det ... så kan man jo blive nød til det.

// ouT
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