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
Mød en af Nordens fremmeste eksperter i adfærdsdesign – Morten Münster, der bl.a. har skrevet ” Jytte fra marketing er desværre gået for i dag” – på Computerworld Cloud & AI Festival.
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
Synes godt om
Ny brugerNybegynder
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.