如何使用具有不同WHERE子句的单个查询

时间:2015-12-15 17:54:17

标签: sql-server

我有一个类似的查询:

SELECT *
FROM USERS
WHERE  location1 = true

users表有4列:

location1
location2
location3
location4

在我的存储过程中,我想传入一个参数,告诉我使用location1或location2等。

有没有办法编写我的查询,这样我就可以处理这个问题,而不必为每个过滤器重新编写相同的查询4次?

我的SELECT查询有点复杂,但基本上它是相同的想法。

2 个答案:

答案 0 :(得分:1)

使用Dynamic query

Declare @column varchar(128), -- Procedure input
        @sql nvarchar(max)

set @sql = '
SELECT *
FROM USERS
WHERE  '+quotename(@column)+' = true'

exec sp_executesql @sql

答案 1 :(得分:1)

您可以使用一些OR来实现这一点(特别是如果您不想使用动态sql路由)。

SELECT *
FROM USERS
WHERE  ((@myLocationParameter = 'location1' AND location1 = true)
        OR (@myLocationParameter = 'location2' AND location2 = true)
        OR ....)