Sql使用where条件和大小写等
我在报表生成器中有一个多参数,比如@route。我需要@route能够传递空白(“”),当这种情况发生时,所有内容都显示在结果上,这将是参数@route的默认设置。(由 其中像“%”+(LTRIM(RTRIM(@route)))+“%”这样的路由 基本上是这样做的:Sql使用where条件和大小写等,sql,sql-server-2008,reportbuilder3.0,Sql,Sql Server 2008,Reportbuilder3.0,我在报表生成器中有一个多参数,比如@route。我需要@route能够传递空白(“”),当这种情况发生时,所有内容都显示在结果上,这将是参数@route的默认设置。(由 其中像“%”+(LTRIM(RTRIM(@route)))+“%”这样的路由 基本上是这样做的: SELECT * FROM @finalTable ft WHERE CASE WHEN @route = '' THEN 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个不同的值。我基本上想设置一个默认值“”(空白或null),并允许用户选择10个不同的值。因此,基本上如果用户没有选择任何内容(“因为默认值为空或可能为空”),那么他/她仍然会得到整个结果集。因此,如果我限制用户只传递单个值,并且“”是其中的一个值,那么像“%”+(LTRIM(RTRIM(@route)))+“%”这样的@route可以工作,但我希望也可以传递多个值。我希望它现在能澄清更多的事情
谢谢你的帮助。。提前谢谢你我认为通常的做法是:
WHERE route = @route OR @route = ''
通常,NULL
用于此目的,而不是空字符串:
WHERE route = @route OR @route IS NULL
很遗憾,无法将参数列表直接传递给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
如果您的@route类似于
'1,5,10'
SELECT *
FROM @finalTable ft
WHERE ',' + @route + ',' LIKE '%,' + ft.route + ',%'
我猜你的@route when not empty类似于
'1,5,10'
??@route实际上是一个varchar,所以类似于'Oral'、'Injection'…@juancarlosoropeza然后你需要更好地解释你的问题,因为现在我看不出需要像这样的,
添加了更多的说明@JuanCarloSoropeZa那么多参数的字符串看起来如何?问题是route可能有20个字符串值,用户只能选择3、5或10。。。。所以当你使用multiple或like时。。。。那么你如何确保涵盖了所有内容?@inquisitiveSQL。您也不能在中使用,除非您使用动态SQL。这是Intrest。。我不确定我是否可以像我想的那样将它与报表生成器一起使用,但我会继续使用它。thx@eftpotrm