2015-12-15 34 views
-1

我有這樣一個查詢:如何使用單個查詢具有變化的WHERE子句

SELECT * 
FROM USERS 
WHERE location1 = true 

的用戶表有4列:

location1 
location2 
location3 
location4 

在我的存儲過程,我想通過在一個參數,這將告訴我使用location1或location2等

有沒有辦法寫我的查詢,以便我可以處理這個,而不必重寫相同的查詢4次,每個過濾器?

我的SELECT查詢有點複雜,但本質上它是相同的想法。

回答

1

你可以使用一些OR s到實現這一目標(特別是如果你不想去的動態SQL路線)。

SELECT * 
FROM USERS 
WHERE ((@myLocationParameter = 'location1' AND location1 = true) 
     OR (@myLocationParameter = 'location2' AND location2 = true) 
     OR ....) 
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