2011-10-04 21 views
0

可以根據參數值添加內連接或左連接還是右連接?現在我唯一的辦法是寫像如何根據存儲過程中傳遞的參數添加連接

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). 

我希望有一個動態查詢類似

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

      end 
+0

爲什麼不只是3個單獨的查詢或IF語句? – gbn

回答

0

你能不能只用一個LEFT OUTER JOIN?

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

,將返回從產品的所有記錄,如果有匹配的記錄(否則POU字段將在結果爲null)只能從ProductOrgUnit返回數據。

或者你可以在你的存儲過程兩個單獨的查詢和使用T-SQL IF語句來選擇要運行的一個。

+0

謝謝,儘管預計工作只是一個額外的加入。 – Ron