Avatar billede nhoff Nybegynder
21. november 2005 - 15:49 Der er 14 kommentarer og
1 løsning

Function der der benytter parameterafhængig Select-sætning

Hejsa

Jeg har brug for en funktion, der kan returnere en varchar på baggrund af 2 parametre: @TopicID og @ReferenceID.

Hvis f.eks. @TopicID er 1 skal den returnere resultatet af "SELECT TOP1 fldNavn FROM tblForfatter WHERE fldID = @ReferenceID"
Hvis @TopicID er 2 ændres SELECT-strengen osv.

Jeg har ikke arbejet meget med funktioner så jeg kan ikke gennemskue syntaksen.
Avatar billede Slettet bruger
21. november 2005 - 15:51 #1
Avatar billede dr_chaos Nybegynder
21. november 2005 - 15:52 #2
create procedure [dbo].[etnavn]
@TopicID int

AS
IF @TopicID = 1
BEGIN
SELECT TOP1 fldNavn FROM tblForfatter WHERE fldID = @ReferenceID
END
ELSE IF @TopicID = 2
BEGIN
SELECT NOGET ANDET
END
Avatar billede nhoff Nybegynder
21. november 2005 - 16:01 #3
-> kryptos: Det får jeg med mit beskedne udgangspunktt desværre ikke meget ud af. Ellers tak

-> dr_chaos: Procedure? Skal det ikke være en function? Det skulle gerne være sådan at jeg kunne kalde den i en almindelig select sætning:
SELECT procReference[1, 14), bla, bla
Avatar billede dr_chaos Nybegynder
21. november 2005 - 16:03 #4
doh sidder og sover.
Avatar billede nhoff Nybegynder
21. november 2005 - 16:22 #5
Jeg kan ikke rigtig få den til at returnere noget?
Jeg har klippet lidt ind fra funktioenr jeg har fundet hér, men får alligevel fejl:

Incorrect syntax near the keyword DECLARE
Incorrect syntax near the keyword SELECT
Incorrect syntax near the keyword SELECT

Her er min function
CREATE FUNCTION dbo.udfReference (@TopicID int, @ReferenceID int) 
RETURNS varchar(200)

AS

DECLARE @stTemp varchar(200)

IF @TopicID = 1
BEGIN
SET @stTemp = SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID
END

ELSE IF @TopicID = 2
BEGIN
set @stTemp = SELECT fldProjekt FROM tblProjekt WHERE fldID = @ReferenceID
END

Return @stTemp
Avatar billede arne_v Ekspert
21. november 2005 - 16:26 #6
virker det med BEGIN END omkring FUNCTION body ?
Avatar billede arne_v Ekspert
21. november 2005 - 16:26 #7
CREATE FUNCTION dbo.udfReference (@TopicID int, @ReferenceID int)
RETURNS varchar(200)

AS
BEGIN

DECLARE @stTemp varchar(200)

IF @TopicID = 1
BEGIN
SET @stTemp = SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID
END

ELSE IF @TopicID = 2
BEGIN
set @stTemp = SELECT fldProjekt FROM tblProjekt WHERE fldID = @ReferenceID
END

END
Avatar billede nhoff Nybegynder
21. november 2005 - 16:28 #8
Til dels. Jeg får nu kun fejlmeddelelsen:

Incorrect syntax near the keyword SELECT
Incorrect syntax near the keyword SELECT
Avatar billede dr_chaos Nybegynder
21. november 2005 - 16:32 #9
CREATE FUNCTION dbo.udfReference (@TopicID int, @ReferenceID int)
RETURNS varchar(200)

AS
BEGIN

DECLARE @stTemp varchar(200)

IF @TopicID = 1
BEGIN
SELECT @stTemp = fldNavn FROM tblForfatter WHERE fldID = @ReferenceID
END

ELSE IF @TopicID = 2
BEGIN
SELECT @stTemp =fldProjekt FROM tblProjekt WHERE fldID = @ReferenceID
END

END
Avatar billede dr_chaos Nybegynder
21. november 2005 - 16:33 #10
den her den helt korrekte

CREATE FUNCTION dbo.udfReference (@TopicID int, @ReferenceID int)
RETURNS varchar(200)

AS
BEGIN

DECLARE @stTemp varchar(200)

IF @TopicID = 1
BEGIN
SELECT @stTemp = fldNavn FROM tblForfatter WHERE fldID = @ReferenceID
END

ELSE IF @TopicID = 2
BEGIN
SELECT @stTemp =fldProjekt FROM tblProjekt WHERE fldID = @ReferenceID
END
RETURN @stTemp
END
Avatar billede nhoff Nybegynder
21. november 2005 - 16:34 #11
"Syntax checks succesfull" - Super! Tak for hjælpen!
Smid et svar for point
Avatar billede arne_v Ekspert
21. november 2005 - 16:35 #12
det undrer mig at

SET @stTemp = SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID

ikke virker

SET @stTemp = (SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID)

måske ??
Avatar billede dr_chaos Nybegynder
21. november 2005 - 16:41 #13
svar :)
Avatar billede dr_chaos Nybegynder
21. november 2005 - 16:42 #14
det vil ikke godtage SET @stTemp = SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID af en eller anden grund.
måske er det fordi den ikke opfatter udtrykket som en varchar.
det er muligt at SET @stTemp = (SELECT fldNavn FROM tblForfatter WHERE fldID = @ReferenceID) vil virke.
Avatar billede nhoff Nybegynder
21. november 2005 - 16:43 #15
-> Arne V: Ja, den med ( ) virker også :-)
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