程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在 where 子句中指定 @filterColumn 和 @filterValue?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在 where 子句中指定 @filtercolumn 和 @filterValue??

开发过程中遇到如何在 where 子句中指定 @filtercolumn 和 @filterValue?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在 where 子句中指定 @filtercolumn 和 @filterValue?的解决方法建议,希望对你解决如何在 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 领域非常相关:

  • http://www.sommarskog.se/dyn-search.html

不过现在,您要完成的语法是...

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,请注明来意。