我的表:
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 :(得分: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