2011-08-25 69 views
1

我的表:進行高級搜索存儲過程

CR_DETAILS

CR_REF_NO VARCHAR(60), ORIGIN_ID INT, DATE_RECEIVED DATETIME, STATUS_ID INT 

我想開發一個存儲過程返回高級搜索結果:

存在着與上述有關領域的搜索頁面在上表中。用戶可以填寫儘可能多的列。

對於上述表中,寫入的存儲過程,一些要求也有象下面這樣: 存在一個下拉列表相對DATE_RECEIVED字段(<,>,=)選項。

用戶對DATE_RECEIVED字段輸入一些值,他可以選擇運營商。然後搜索結果應該滿足上述條件。

任何人都可以請我建議我該怎麼做?

截至目前,我寫了下面的存儲過程,但不工作:(

ALTER PROCEDURE usp_AdvancedSearchCR 
    @CR_REF_NO VARCHAR(35), 
    @ORIGIN_ID INT, 
    @DATE_RECEIVED DATETIME, 
    @DATE_RECEIVED_COMPARE_STYLE CHAR, 
    @STATUS_ID INT 
AS 
BEGIN 
    SELECT * FROM CR_DETAILS WHERE 
     ((CR_REF_NO LIKE '%' + @CR_REF_NO + '%') OR (CR_REF_NO IS NULL)) AND 
     ((ORIGIN_ID = @ORIGIN_ID) OR (@ORIGIN_ID = 0)) AND 
     --I am not understanding how to write code for DATE_RECEIVED 
     ((STATUS_ID = @STATUS_ID) OR (@STATUS_ID = 0)) 
END 

在測試存儲過程,我也沒有輸入任何DATE_RECEIVED價值和測試,但我沒有得到。任何結果因此我明白,我的其他代碼也是錯誤的

請給我建議,這對我來說是迫切

+0

PHew - 這個存儲過程將**不**具有很好的性能 - 這是肯定的! –

+0

請閱讀聖經:http://www.sommarskog.se/dyn-search.html對不起,您必須選擇您的SQL Server版本,因爲您沒有在問題中指定它。 –

回答

1

你可以寫出來在漫長的形式與以下替換您的評論:。

(
(@DATE_RECEIVED_COMPARE_STYLE = '<' AND DATE_RECEIVED < @DATE_RECEIVED) OR 
(@DATE_RECEIVED_COMPARE_STYLE = '>' AND DATE_RECEIVED > @DATE_RECEIVED) OR 
(@DATE_RECEIVED_COMPARE_STYLE = '=' AND DATE_RECEIVED = @DATE_RECEIVED) 
) AND