Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server-按可变参数数筛选查询_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql server SQL Server-按可变参数数筛选查询

Sql server SQL Server-按可变参数数筛选查询,sql-server,sql-server-2014,Sql Server,Sql Server 2014,情景: 我有一个要返回列表的存储过程(spFetch) 表中的结果 存储过程(spFetch)定义了许多 调用者可能传入也可能不传入的参数。如果未传递参数值 在由调用者指定的情况下,它们默认为null 如果这些参数中有任何一个 如果不为null,则应在select的where子句中使用它们 (spFetch)中的语句返回筛选结果 我有一个前端应用程序,可以扮演来电者,但尚未设置 关于如何传递参数(逗号分隔) 列表、明确引用等) 这里的想法是,在后端,我可以限制可能的查询参数,同时仍然允许广泛的参

情景:

  • 我有一个要返回列表的存储过程(
    spFetch
    ) 表中的结果
  • 存储过程(
    spFetch
    )定义了许多 调用者可能传入也可能不传入的参数。如果未传递参数值 在由调用者指定的情况下,它们默认为null
  • 如果这些参数中有任何一个 如果不为null,则应在select的where子句中使用它们 (
    spFetch
    )中的语句返回筛选结果
  • 我有一个前端应用程序,可以扮演来电者,但尚未设置 关于如何传递参数(逗号分隔) 列表、明确引用等)
  • 这里的想法是,在后端,我可以限制可能的查询参数,同时仍然允许广泛的参数

    如何编写
    spFetch
    ,使其满足上述场景的所有要求


    对于这个场景,必须有一个最佳实践,想想其他开发人员还没有做到这一点是疯狂的

    大多数人不会使用逗号分隔的列表,因为您必须拆分该列表。查看表值参数以与@lukaszszozdaj中的kitchen-sink链接一起使用。请注意,您通常不希望命名以sp开头的存储过程,因为它可能与以sp开头的系统过程冲突,所以只需命名您的usp或something@sniperd-会有冲突吗?怎么做?厨房水槽绝对是答案,很棒的解决方案@Lukasz Szozda,想正式添加它作为答案,这样我就可以标记了吗?谢谢@amy-b的格式;仍在试图找出格式化选项
    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'