Principale utente con più risposte
INNER JOIN parametrica

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 = 1SELECT 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
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 = 1UNION ALL
SELECT A.*
FROM dbo.TabellaA A
INNER JOIN dbo.TabellaC C
ON A.ID = C.ID WHERE @ID = 2UNION ALL
SELECT A.*
FROM dbo.TabellaA A
INNER JOIN dbo.TabellaD D
ON A.ID = D.ID WHERE @ID = 3Oppure 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
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 = 1UNION ALL
SELECT A.*
FROM dbo.TabellaA A
INNER JOIN dbo.TabellaC C
ON A.ID = C.ID WHERE @ID = 2UNION ALL
SELECT A.*
FROM dbo.TabellaA A
INNER JOIN dbo.TabellaD D
ON A.ID = D.ID WHERE @ID = 3Oppure 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
-