2011-10-04 1 views
0

Puis-je ajouter une jointure interne ou une jointure à gauche ou une jointure à droite en fonction de la valeur du paramètre. La seule façon en ce moment j'écrit une requête dynamique commeComment ajouter une jointure en fonction du paramètre passé dans la procédure stockée

set @sql = 'select * from dbo.products PM(nolock) 
'+ case when @orgunit is not null then ' join productorgunit pou on PM.ProductNumber =  pou.ProductNumber ' 
       else '' 
      end 
     + ' 
Exec(@sql). 

J'espère qu'il ya quelque chose comme

Select * from dbo.products PM(nolock) 
case when @orgunit is not null then join productorgunit pou on PM.ProductNumber = pou.ProductNumber 

      end 
+0

Pourquoi pas seulement 3 requêtes séparées ou une instruction IF? – gbn

Répondre

0

Pouvez-vous pas seulement utiliser LEFT OUTER JOIN?

SELECT PM.*, pou.ProductNumber 
FROM dbo.Products PM LEFT OUTER JOIN ProductOrgUnit pou ON 
            PM.ProductNumber = pou.ProductNumber 

qui renverra tous les enregistrements de produits, et seulement renvoyer des données à partir ProductOrgUnit s'il y a un enregistrement correspondant (sinon les champs de POU seront nuls dans le resultset).

Vous pouvez également avoir deux requêtes distinctes dans votre sproc et utiliser une instruction T-SQL IF pour sélectionner celle à exécuter.

+0

Merci, fonctionne comme prévu juste une jointure supplémentaire si. – Ron

Questions connexes