SQL Server - 按可变数量的参数过滤查询
Posted
技术标签:
【中文标题】SQL Server - 按可变数量的参数过滤查询【英文标题】:SQL Server - filter query by variable number of parameters 【发布时间】:2018-06-13 18:27:52 【问题描述】:场景:
-
我有一个存储过程 (
spFetch
) 我想返回一个列表
表中的结果。
存储过程 (spFetch
) 定义了许多
调用者可能会或可能不会传入的参数。如果未传递参数值
由调用者输入,它们默认为 null。
如果这些参数中的任何一个
不为空,它们应该在 select 的 where 子句中使用
(spFetch
) 中的语句以返回过滤结果。
我有一个前端应用程序可以充当调用者,但它没有设置
关于如何传递参数(逗号分隔
列表、显式引用等)
这里的想法是,在后端我可以限制可能的查询参数,同时仍然允许范围广泛的参数。
spFetch
怎么写才能满足上述场景的所有要求?
对于这个场景必须有一个最佳实践,认为其他开发人员还没有这样做是不是太疯狂了?
【问题讨论】:
sqlsentry.tv/the-kitchen-sink-procedure 大多数不是用逗号分隔的列表,因为您必须然后拆分该列表。查看表值参数以配合来自@LukaszSzozda 的厨房水槽链接 只是一个旁注,你通常不想命名以 sp 开头的存储过程,因为它可能与以 sp_ 开头的系统冲突,所以只需命名你的 usp_什么的 @sniperd - 可能冲突吗?怎么样? 厨房水槽绝对是答案,很棒的解决方案! @Lukasz Szozda,想正式将其添加为答案,以便我标记对吗? 【参考方案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'
【讨论】:
感谢@amy-b 的格式化;仍在尝试找出格式选项以上是关于SQL Server - 按可变数量的参数过滤查询的主要内容,如果未能解决你的问题,请参考以下文章
用于从连接表中进行选择的 T-SQL 查询,其中有可变数量的参数?
sqlserver查询,按分公司、汇总当月的订单数量怎么写sql查询