首页 > 解决方案 > 基于提供的参数的动态查询(在存储过程中)(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) = '',

我想构建一个足够动态的查询,只查询提供的值。

标签: sql-serverstored-procedurescase

解决方案


因此,您可以默认将参数更改为“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)

推荐阅读