none
INNER JOIN parametrica RRS feed

  • Domanda

  • Ciao a tutti,
    in SS2008 è possibile fare una query parametrica nell'INNER JOIN?

    Mi spiego, ho una stored procedure che ha un parametro di tipo INT, e a seconda del valore di questo devo scegliere su quale tabella impostare le JOIN.

    Ad esempio, potrei avere


    -- Mi arriva @ID = 1

    SELECT A.*
    FROM dbo.TabellaA A
    INNER JOIN dbo.TabellaB B
    ON A.ID = B.ID


    -- Mi arriva @ID = 2
    SELECT A.*
    FROM dbo.TabellaA A
    INNER JOIN dbo.TabellaC C
    ON A.ID = C.ID

     

    -- Mi arriva @ID = 3
    SELECT A.*
    FROM dbo.TabellaA A
    INNER JOIN dbo.TabellaD D
    ON A.ID = D.ID


    Come è meglio effettuare una cosa del genere, mantenendo sempre la struttura ad una sola stored procedure?

    Grazie


    Luigi

    mercoledì 23 febbraio 2011 11:34

Risposte

  • Ciao Luigi, potresti fare così se vuoi evitare di usare più statements, ma usandone uno solo... , ... mantendo un INNER JOIN... 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaB B
    ON A.ID = B.ID WHERE @ID = 1

    UNION ALL 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaC C
    ON A.ID = C.ID 
    WHERE @ID = 2

    UNION ALL 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaD D
    ON A.ID = D.ID WHERE @ID = 3

    Oppure puoi fare appunto una sp con più statement e mettere degli "IF" in base a @ID... 

    Oppure ci sono altre soluzioni... ma preferirei una delle due sopra.

    CIAO!



    Adriano
    • Contrassegnato come risposta Ciupaz mercoledì 23 febbraio 2011 13:28
    mercoledì 23 febbraio 2011 13:09

Tutte le risposte

  • Ciao Luigi, potresti fare così se vuoi evitare di usare più statements, ma usandone uno solo... , ... mantendo un INNER JOIN... 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaB B
    ON A.ID = B.ID WHERE @ID = 1

    UNION ALL 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaC C
    ON A.ID = C.ID 
    WHERE @ID = 2

    UNION ALL 

    SELECT A.*
    FROM dbo.TabellaA A 
    INNER JOIN dbo.TabellaD D
    ON A.ID = D.ID WHERE @ID = 3

    Oppure puoi fare appunto una sp con più statement e mettere degli "IF" in base a @ID... 

    Oppure ci sono altre soluzioni... ma preferirei una delle due sopra.

    CIAO!



    Adriano
    • Contrassegnato come risposta Ciupaz mercoledì 23 febbraio 2011 13:28
    mercoledì 23 febbraio 2011 13:09
  • Direi che seguirò la tua prima strada.

    Grazie Adriano.

    Luigi

    mercoledì 23 febbraio 2011 13:28