我在报表生成器中有一个多参数说@route。我需要@route才能传递空白('')当发生这种情况时,所有内容都显示在结果上,这将是我的参数@route的默认值。 (由完成 路线LIKE'%' +(LTRIM(RTRIM(@route)))+'%')
基本上做这样的事情:
SELECT *
FROM @finalTable ft
WHERE CASE WHEN @route = '' THEN route LIKE '%' + (LTRIM(RTRIM(@route))) + '%'
ELSE route IN (@route)
END
为了使事情更清楚:
@route是一个字符串,并且说有200个不同的值。我基本上想要设置一个默认值' ' (空白或空)并允许说10个不同的值供用户选择。所以基本上如果用户没有选择任何东西('因为默认值为空或可以为空),那么他/她仍然获得整个结果集。因此,如果我限制用户只传递单个值和' '作为其中之一然后@route LIKE'%' +(LTRIM(RTRIM(@route)))+'%'但是我希望它能够通过传递多个值来完成。我希望现在能更清楚地澄清事情!!
感谢任何帮助..提前谢谢
答案 0 :(得分:0)
我认为正常的方法有点像:
WHERE route = @route OR @route = ''
通常NULL
用于此目的而不是空字符串:
WHERE route = @route OR @route IS NULL
答案 1 :(得分:0)
不幸的是,无法将参数列表直接传递给IN语句。
如果你想这样做,我建议最简单的方法是发送一个包含你的ID列表的表值参数。这样你可以加入它以获得与你所建议的IN查询相同的效果。
这不会直接允许你做条件WHERE子句,但你可以做的是检查表值参数是否包含任何行并相应地采取行动 - 可能是这样的:
DECLARE @Routes IDList;
SELECT *
FROM @finalTable ft
LEFT JOIN @Routes r
ON ft.Route=r.Route
CROSS JOIN (SELECT COUNT(*) AS Recs FROM @Routes) cnt
WHERE
1= CASE WHERE cnt.Recs = 0 THEN 1
ELSE CASE WHEN r.Route IS NULL THEN 0 ELSE 1 END
答案 2 :(得分:0)
如果您的@route类似于'1,5,10'
SELECT *
FROM @finalTable ft
WHERE ',' + @route + ',' LIKE '%,' + ft.route + ',%'