TSQL:当你可以或不发送参数时如何处理WHERE子句

TSQL: How to deal with the WHERE clause when you may or not send parameters

这是我在过滤代码中所做的事情。我如何在 SPROC 中获得相同的东西?

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

我知道如何发送逗号分隔值作为参数。我的重点是如何在 SPROC 中应用条件 WHERE 子句。

当有要查找的 ID 时,我可以发送类似 SqlParameter("@value1", value1), SqlParameter("@value2", value2)

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

现在没有参数发送怎么办,我该如何处理WHERE子句?

感谢您的帮助

我在工作中经常使用它。

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 子句和 return 来自 table.

的所有记录