Stored procedures 根据Crystal Reports中的选择禁用参数

Stored procedures 根据Crystal Reports中的选择禁用参数,stored-procedures,crystal-reports,reporting,Stored Procedures,Crystal Reports,Reporting,我正在使用Crystal reports使用特定的日期参数生成报告,可以使用@p\u start\u date和@p\u end\u date之间的范围,或者@t\u start\u date和@t\u end\u date之间的范围。存储过程中的IF语句通过用户在报告运行时指定的布尔参数确定要使用的日期(@use\u p\u date) 我想做的是,如果@use\u p\u date为1,则禁用其他日期字段(@t\u start\u date和@t\u end\u date)进行选择,因为它们

我正在使用Crystal reports使用特定的日期参数生成报告,可以使用
@p\u start\u date
@p\u end\u date
之间的范围,或者
@t\u start\u date
@t\u end\u date
之间的范围。存储过程中的IF语句通过用户在报告运行时指定的布尔参数确定要使用的日期(
@use\u p\u date

我想做的是,如果
@use\u p\u date
为1,则禁用其他日期字段(
@t\u start\u date
@t\u end\u date
)进行选择,因为它们不会被使用,反之亦然,如果
@use\u p\u date
设置为false


这能做到吗?如果是,那么我该怎么做?

当然可以。我相信有不同的方法,但一个相当简单的方法是:

    BEGIN
IF (@use_p_date) =1 
    SELECT * FROM DataBase
    WHERE OrderDate >=@p_start_date and OrderDate =< @p_end_date
ELSE
    SELECT * FROM DataBase
    WHERE OrderDate >=@t_start_date and OrderDate =< @t_end_date

END

我更多的是在实际的crystal reports界面中寻找禁用的参数,而不是在Sql本身中,这已经准备好了,请参阅修改后的答案。语法可能不是100%正确,但我希望你能理解。
If ({?use_p_date} =1 
Then OrderDate >={?p_start_date} and OrderDate =< {?p_end_date}
Else OrderDate >={?t_start_date} and OrderDate =< {?t_end_date}
if hasvalue({?p_start_date}) and hasValue({?p_end_date}) then .....
else .......