SQL 服务器 - 按可变数量的参数过滤查询

SQL Server - filter query by variable number of parameters

场景:

  1. 我有一个存储过程 (spFetch),我想 return 一个列表 来自 table 的结果。
  2. 存储过程(spFetch)定义了一些 调用者可能传递也可能不传递的参数。如果没有传递参数值 在调用者中,它们默认为 null。
  3. 如果这些参数中的任何一个 不为空,它们应该用在 select 的 where 子句中 (spFetch) 中的语句到 return 过滤结果。
  4. 我有一个前端应用程序可以充当来电者,但尚未设置 关于如何传递参数一成不变(逗号分隔 列表、明确引用等)

这里的想法是,在后端我可以限制可能的查询参数,同时仍然允许广泛的参数。

如何写spFetch才能满足上述场景的所有要求?

对于这个场景必须有一个最佳实践,认为其他开发者还没有这样做是不是很疯狂?

CREATE PROCEDURE [dbo].[p_Search] ( @Name sysname = NULL, @Objectid INT  = NULL, @schemaId INT  = NULL )
AS
BEGIN
    SELECT
        [name]
       ,[object_id]
       ,[principal_id]
       ,[schema_id]
       ,[parent_object_id]
       ,[type]
       ,[type_desc]
       ,[create_date]
       ,[modify_date]
       ,[is_ms_shipped]
       ,[is_published]
       ,[is_schema_published]
    FROM
        [sys].[objects]
    WHERE 1                                = 1
          AND [name]                         = ISNULL(@Name, [name])
          AND ISNULL(@Objectid, [object_id]) = [object_id]
          AND ISNULL(@schemaId, [schema_id]) = [schema_id];
END;

EXEC p_search @Name = 'sysallocunits'