Avatar billede ml Nybegynder
19. september 2006 - 09:21 Der er 2 kommentarer

Stored Procedure: JOIN kun hvis variabel =

Jeg er lidt i tvivl om hvordan jeg lettest bygger det her op i en stored procedure.

Jeg har en stored procedure, som f.eks. har variablel @CurrentMenuLevel. I SQL kaldet henter jeg en masse produkter og vil så kun lave en JOIN til Menu tabellen hvis @CurrentMenuLevel > 0

Er det muligt at lave en "if" sætning inde i selve SQLen så jeg ikke behøver have alt det andet SQL stående to gange?

Følgende fungere f.eks. ikke, men viser meget godt hvad det er jeg gerne vil. Se ved "IF @CurrentMenuLevel > 0":

----------------------------------------------

SELECT
ShopProductVersion.ProductID,
ShopProductDescription.ProductName,
ShopProductDescription.ProductDescriptionShort

FROM
ShopProduct

INNER JOIN
ShopProductDescription
ON
ShopProduct.ProductID = ShopProductDescription.ProductID

INNER JOIN
ShopProductVersion
ON
ShopProduct.ProductID = ShopProductVersion.ProductID


    IF @CurrentMenuLevel > 0
    BEGIN

        INNER JOIN ShopMenuRelation
        ON
        ShopMenuRelation.MenuItemID = @CurrentMenuLevel
        AND
        ShopMenuRelation.ProductID = ShopProduct.ProductID

    END

WHERE
(ShopProduct.Active = 1)

GROUP BY
ShopProductVersion.ProductID,
ShopProductDescription.ProductName,
ShopProductDescription.ProductDescriptionShort
Avatar billede janus_007 Nybegynder
19. september 2006 - 16:04 #1
Hej ml

Du kunne evt. bygge den med den parameter som en join-clause...

Hej ml

SELECT
ShopProductVersion.ProductID,
ShopProductDescription.ProductName,
ShopProductDescription.ProductDescriptionShort

FROM
ShopProduct

INNER JOIN
ShopProductDescription
ON
ShopProduct.ProductID = ShopProductDescription.ProductID

INNER JOIN
ShopProductVersion
ON
ShopProduct.ProductID = ShopProductVersion.ProductID
        INNER JOIN ShopMenuRelation
        ON
        ShopMenuRelation.MenuItemID = @CurrentMenuLevel
        AND
        ShopMenuRelation.ProductID = ShopProduct.ProductID
        AND @CurrentMenuLevel > 0
WHERE
(ShopProduct.Active = 1)

GROUP BY
ShopProductVersion.ProductID,
ShopProductDescription.ProductName,
ShopProductDescription.ProductDescriptionShort
Avatar billede janus_007 Nybegynder
09. oktober 2006 - 18:34 #2
Pingding... :-)
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