高级搜索的存储过程

时间:2011-08-25 12:17:16

标签: sql-server

我的表:

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输入任何值并进行测试,但我没有得到任何结果。因此我明白我的其他代码也是错误的。

请建议我,这对我来说很紧急。

1 个答案:

答案 0 :(得分: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