sql-server - 基于提供的参数的动态查询(在存储过程中)(SQL Server 2016)
问题描述
我有一个包含 30 多列的员工表。此表由 Web 服务通过返回所有用户的存储过程公开。
我需要创建一个新的存储过程,允许您搜索 6 个特定列。我将这些列作为存储过程的输入参数,但我不确定如何创建只使用传递的参数的查询。
例如:
exec SearchUsers @firstName = 'John', @department = 'Admin'
应该只执行那些列的查询。但是,有 5 个可用的参数可以传入。
这是我的参数
@lastName nvarchar(255) = '',
@firstName nvarchar(255) = '',
@office nvarchar(50) = '',
@department nvarchar(50) = '',
@language nvarchar(255) = '',
@jobTitle nvarchar(255) = '',
我想构建一个足够动态的查询,只查询提供的值。
解决方案
因此,您可以默认将参数更改为“null”
@lastName nvarchar(255) = null,
@firstName nvarchar(255) = null,
@office nvarchar(50) = null,
@department nvarchar(50) = null,
@language nvarchar(255) = null,
@jobTitle nvarchar(255) = null,
然后在 where 子句中,在将值与相应字段进行比较之前检查是否存在 NULL。
where (@lastName is null or lastname = @lastName)
and (@firstName is null or firstName = @firstName)
and (@office is null or office = @office)
and (@department is null or department = @department)
and (@language is null or language = @language)
and (@jobTitle is null or jobTitle = @jobTitle)
推荐阅读
- wordpress - 在 Wordpress 上以管理员身份登录会使 MAMP 运行缓慢
- vulkan - Vulkan 程序会在没有 gpu(离散或集成)的设备上运行吗?
- asp.net-core - 将经典 ASP 应用程序迁移到 ASP.NET Core
- android - 如何将 livedata 和 viewmodel 与 viewholder 作为 Lifecycle Owner 一起使用?
- sql - sql休眠hql
- statistics - 区分两种相关性 - 相关性与因果关系
- wpf - 获取数据库的属性值,每个语句都崩溃到集合中,枚举操作可能无法执行
- python - 训练时实时绘制模型预测
- c# - 如何修复 Linq 中的“表达式可能不包含动态操作”?
- flutter - 使用 Flutter 访问 BLE 数据并将其存储在 SQFlite 数据库中