2014-09-05 22 views
0

我想建立一個存儲過程,但是其中的clus正變得棘手,因爲它依賴於傳入的內容而變化。混合SQL Proc,根據傳入的參數添加動態其中clus?

在前端,我有3個可以選擇的複選框。這些代表公司規模。 我在我的數據庫中有7家公司規模。 其中,如果小檢查我哪裏類將需要:

例子:

小託運。

WHERE Size = Unclasified AND Size = VerySmal AND Size = Small 

中檢查。

WHERE Size = Medium AND Size = MediumLarge 

大檢查。

WHERE Size = Large AND Size = Huge 

現在,因爲這些是複選框,他們調用所有被檢查或只有一個或兩個檢查。

所以我想先建立我在那裏的CLU,然後再添加它:

DECLARE @SizeCatWhereClus varchar(MAX) 
SET @SizeCatWhereClus = 'cm.sizecat=' + 'H: UNCLASSIFIED' + 'AND cm.sizecat= ...' 



WHERE @SizeCatWhereClus 

這可能嗎?如果沒有,我可以遵循什麼建議?

回答

3

不幸的是,SQL Server中的動態SQL對它有一個「全或無」的質量。如果要動態生成WHERE子句,則必須在變量中生成整個查詢,然後在變量中生成EXECUTE。出於安全性和性能方面的原因,這在Sql Server中通常是一個壞主意。

幸運的是,對於您的特定問題,動態sql實際上並不是必需的,因爲您的WHERE子句可以使用邏輯運算符組合來獲得所需的結果。

DECLARE @SmallChecked BIT, @MediumChecked BIT, @LargeChecked BIT 
-- set the values of the @...Checked variables to the values of your checkboxes 
SELECT * FROM [MyTable] 
WHERE (@SmallChecked = 1 AND Size IN ('Unclassified', 'VerySmall', 'Small')) 
    OR (@MediumChecked = 1 AND Size IN ('Medium', 'MediumLarge')) 
    OR (@LargeChecked = 1 AND Size IN ('Large', 'Huge'))