TSQL: как работать с предложением WHERE, когда вы можете отправлять или не отправлять параметры - PullRequest
0 голосов
/ 22 декабря 2018

Это то, что я делаю в коде для фильтрации.Как мне получить то же самое в SPROC?

var projects = _context.Projects.AsQueryable();
if (parameterList.OfficeIds)
{
   projects = projects.Where(x => parameterList.OfficeIds.Contains( x.OfficeId));
}
var list = projects.ToListAsync();

Я знаю, как отправлять значения через запятую в качестве параметров.Больше внимания уделяется тому, как применить условное предложение WHERE в SPROC.

Когда есть идентификаторы для поиска, я могу отправить что-то вроде SqlParameter("@value1", value1), SqlParameter("@value2", value2)

SELECT * FROM Projects WHERE OfficeId IN ({0})

Что теперь, когда нет параметра для отправки, как мне поступить с ГДЕ предложение?

Спасибо за помощь

1 Ответ

0 голосов
/ 23 декабря 2018

Я часто использую это в своей работе.

DECLARE @UserId int

SELECT *
FROM Users u
WHERE UserId = ISNULL(@UserId, u.UserId)

ИЛИ

DECLARE @CSV VARCHAR(8000) 

SELECT * 
FROM Projects p 
WHERE P.OfficeId IN (select * from dbo.fn_Splitter(@CSV)) OR @CSV IS NULL

Поэтому, если вы передадите значение для параметра, он будет использовать значение параметра и отфильтроватьстрок.Если вы не передадите значение для параметра или оно будет пустым, оно просто проигнорирует предложение WHERE и вернет все записи из таблицы.

...