我有一些复选框(“条件过滤器”),用户可以勾选它以选择过滤器条件
例如:
CheckBox 1 : OrderNumber
CheckBox 2 : Driver
CheckBox 3 : Code
...
并传递到存储过程-这样的事情:
ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe nvarchar(max),
@SeleOrder nvarchar(max),
@SeleCustomer nvarchar(max),
@SeleSite nvarchar(max),
@SeleTruck nvarchar(max),
@SeleDriver nvarchar(max),
AS
BEGIN
//此时卡住
我想编写一个可以处理用户选择多例的过程,我对字符串生成器有想法,并传入WHERE子句,但是SQLSERVER不接受此(它接受布尔参数)
有人可以帮我吗。谢谢。
答案 0 :(得分:0)
您可以按以下方式使用它
ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe nvarchar(max),
@SeleOrder nvarchar(max),
@SeleCustomer nvarchar(max),
@SeleSite nvarchar(max),
@SeleTruck nvarchar(max),
@SeleDriver nvarchar(max),
AS
BEGIN
将@SeleOrder,@SeleCustomer值传递为0(表示未选中)和1(表示选中的复选框)
select * from
yourtable
where
OrderNumber= CASE WHEN @SeleOrder = '0' THEN OrderNumber ELSE @SeleOrder END
AND
CUSTOMER= CASE WHEN @SeleCustomer = '0' THEN CUSTOMER ELSE @SeleCustomer END
AND
Driver= CASE WHEN @SeleDriver = '0' THEN Driver ELSE @SeleDriver END
确保您将默认值传递为0。在这里,您已将数据类型选择为nvarchar(max),因此我已将其写为“ 0”,否则,如果您传递的只是int值,则可以写为0。或者您可以将默认值设置为0
ALTER PROCEDURE [dbo].[DailyBatchSummaryReport_NoGroup]
@FromDatePara Datetime,
@ToDatePara Datetime,
@SeleRecipe int = 0,
@SeleOrder int = 0,
@SeleCustomer int = 0,
@SeleSite int = 0,
@SeleTruck int = 0,
@SeleDriver int = 0,
AS
BEGIN
根据您的编码方便选择逻辑。但以上方法可以使用
答案 1 :(得分:0)
也许您可以在以下情况下尝试这样的事情:-
如果用户选中复选框,则传递相应的值或传递null。
所以您的情况可能像
Where
(Colname1 = @Paramenter1 or @Paramenter1 is null)
and
(Colname2 = @Paramenter2 or @Paramenter2 is null)
....等等....