2009-11-16 25 views
0

我有一個200線長的存儲過程,它得到的參數「prmtr」擴展存儲過程(添加一個部分吧),通過使用SQL Server中的參數

我想要做的就是添加根據我的參數,我的存儲過程是一個「sql部分」。

例如:

SELECT A.* FROM 
(
SELECT * FROM table1 
) A 

IF (my parameter) = a 

LEFT JOIN 
(
SELECT * FROM table2 
) B 
ON A.ID= B.ID 

回答

2

你可以像下面這樣做

SELECT A.* 
FROM (
      SELECT * 
      FROM table1 
     ) A LEFT JOIN 
     (
      SELECT * 
      FROM table2 
     ) B ON @prmt = 'A' 
      AND A.ID= B.ID 
+0

,對於我的問題的作品,但有關如何安裝一個SQL部分怎麼樣「WHERE A.ID IN(SELECT ID FROM newtable的)」,這取決於在我的參數? – stckvrflw 2009-11-16 09:39:27

+0

您可以切換一個WHERE語句,比如'WHERE @prmt <>'A'或者A.ID IN(SELECT ID FROM newTable)' – Andomar 2009-11-16 09:40:37

+0

謝謝你們很酷的答案。 :) – stckvrflw 2009-11-16 09:50:40

1

你不能改變一個這樣的查詢 - 所以你有兩個選擇:

  • 有兩個單獨的查詢在存儲過程(每個分支) - 確定兩,但不能很好地擴展到更復雜的組合
  • 使用動態SQL;即在varchar(4000)中建立查詢並使用sp_ExecuteSQL來調用它;顯然還算可以改變一個包括額外'LEFT JOIN ...'

所有這一切說,雖然,我一般喜歡單一的存儲過程總是返回相同的架構 - 這與大多數ORM工具完全弄亂如果您更改基於參數的列。東西看...

相關問題