Avatar billede brunhoj Nybegynder
25. juni 2005 - 13:12 Der er 1 kommentar

Syntaks for parameter i Function

Hej Xperter

Jeg har en UDF, som jeg gerne vil lave generisk. Sætningen 'SELECT ... WHERE fldBeskedID = @BeskedID' fra nedenstående kode vil jeg gerne lægge ind som parameter i funktionen, så den kan bruges i forskellige sammenhænge. Hvordan gør jeg det? Funktionen skal kaldes vha. en MS Access PassThrough forespørgsel.

/Christian

CREATE FUNCTION dbo.Besked (@BeskedID int) 
RETURNS varchar(2000) AS 
BEGIN
DECLARE @strTemp varchar(200), @stReturn varchar(2000), @stSep varchar(2)
DECLARE curBesked CURSOR FOR

SELECT tblPersPerson.fldFornavn FROM tblPersPerson RIGHT OUTER JOIN tblComBeskedPerson
ON tblPersPerson.fldPersPersonID = tblComBeskedPerson.fldPersonID
WHERE fldBeskedID = @BeskedID

OPEN curBesked
SET @stSep = ''
SET @stReturn = ''
FETCH NEXT FROM curBesked INTO @strTemp
WHILE (@@FETCH_STATUS = 0)
BEGIN
    SET @stReturn = @stReturn + @stSep + @strTemp
    SET @stSep = ', '
    FETCH NEXT FROM curBesked INTO @strTemp
END
CLOSE curBesked
DEALLOCATE curBesked
RETURN @stReturn
END
Avatar billede trer Nybegynder
07. september 2005 - 15:25 #1
Den eneste måde du kan lave en sådan parameter på er via et view eller en anden funktion (når du skal bruge den i en funktion). Det er genbrug af kode, men det er ikke nødvendigvis en god løsning for en databaseserver. Problemet er, at du vil få stor risiko for mange rekompileringer ved at kalde andre objekter.

I øvrigt kan den cursor du har angivet skrives om til et enkelt statement som vil performe væsenligt bedre. Brug aldrig en cursor-baseret løsning hvis det kan undgås!

Utestet - men prøv dig frem med den her.

CREATE FUNCTION dbo.Besked (@BeskedID int) 
RETURNS varchar(2000) AS 
BEGIN
DECLARE @stReturn varchar(2000), @stSep varchar(2)
set @stSep = ','
select @stReturn = @stReturn + @stSep + tblPersPerson.fldFornavn
FROM tblPersPerson RIGHT OUTER JOIN tblComBeskedPerson
ON tblPersPerson.fldPersPersonID = tblComBeskedPerson.fldPersonID
WHERE fldBeskedID = @BeskedID

return left(@stReturn,len(@stReturn)-1)
END
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