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
)定义了许多
调用者可能传入也可能不传入的参数。如果未传递参数值
在由调用者指定的情况下,它们默认为nullspFetch
)中的语句返回筛选结果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'