SQL Server - 按可变数量的参数

时间:2018-06-13 18:27:52

标签: sql-server sql-server-2014

情景:

  1. 我有一个存储过程(spFetch),我想返回一个列表 表的结果
  2. 存储过程(spFetch)定义了许多 调用者可能传入或不传入的参数。如果未传递参数值 在调用者处,他们默认为null。
  3. 如果有这些参数中的任何一个 不为null,它们应该在select的where子句中使用 (spFetch)中的语句返回过滤结果。
  4. 我有一个前端应用程序,它将作为调用者,但它没有设置 关于如何传递参数的意见(逗号分隔 列表,显式引用等)
  5. 这里的想法是,在后端我可以限制可能的查询参数,同时仍然允许广泛的参数。

    如何编写spFetch以满足上述方案的所有要求?

    对于这个场景,必须有一个最好的练习,认为其他开发者不会这样做已经是疯了吗?

1 个答案:

答案 0 :(得分:1)

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'