Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql使用where条件和大小写等_Sql_Sql Server 2008_Reportbuilder3.0 - Fatal编程技术网

Sql使用where条件和大小写等

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))) + '%'

我在报表生成器中有一个多参数,比如@route。我需要@route能够传递空白(“”),当这种情况发生时,所有内容都显示在结果上,这将是参数@route的默认设置。(由 其中像“%”+(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