大佬教程收集整理的这篇文章主要介绍了如何在 where 子句中指定 @filterColumn 和 @filterValue?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望能够动态指定过滤查询的列和过滤依据的值。
以下 where
子句在每个 case when
行上都给了我错误
在预期条件的上下文中指定的非布尔类型的表达式
declare @filtercolumn varchar(30) = 'Firstname'
declare @filterValue varchar(120) = 'Dave'
[SELEct statement].....
where
case when @filtercolumn = 'Firstname' THEN Firstname END,case when @filtercolumn = 'Lastname' THEN Lastname END,case when @filtercolumn = 'StatusID' THEN u.Status END,case when @filtercolumn = 'CreatedDate' THEN u.CreatedDate END,like @filterValue
我该如何解决这个问题,以便获得正确的列来过滤结果。
这是旧的,但与您要访问的 SQL 领域非常相关:
不过现在,您要完成的语法是...
WHERE
CASE @filtercolumn
WHEN 'Firstname' THEN Firstname
WHEN 'Lastname' THEN Lastname
WHEN 'StatusId' THEN u.Status
WHEN 'CreatedDate' THEN u.CreatedDate
END
LIKE
@filterValue
这假设所有列都可以转换为相同的相关数据类型;一个字符串。
但是请注意,根据对您的问题的评论以及我的答案顶部链接的文章,从 SQL 引擎的角度来看,这种模式远非理想。
,你可以做这样的事情。这将允许您转换 FilterValue 并使用 Like 以外的其他内容,因为 Like 不适用于日期类型
declare @filtercolumn varchar(30) = 'Firstname'
declare @filterValue varchar(120) = 'Dave'
[SELEct statement].....
where
((@filtercolumn = 'Firstname' and Firstname like @filtervalue) or @filtercolumn <> 'Firstname')
and ((@filtercolumn = 'Lastname' and Lastname like @filtervalue) or @filtercolumn <> 'Lastname')
and ((@filtercolumn = 'StatusId' and u.Status like @filtervalue) or @filtercolumn <> 'StatusId')
and ((@filtercolumn = 'CreatedDate' and u.CreatedDate = @filtervalue) or @filtercolumn <> 'CreatedDate')
option (recompilE)
以上是大佬教程为你收集整理的如何在 where 子句中指定 @filterColumn 和 @filterValue?全部内容,希望文章能够帮你解决如何在 where 子句中指定 @filterColumn 和 @filterValue?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。