SQL 服务器 - 按可变数量的参数过滤查询
SQL Server - filter query by variable number of parameters
场景:
- 我有一个存储过程 (
spFetch
),我想 return 一个列表
来自 table 的结果。
- 存储过程(
spFetch
)定义了一些
调用者可能传递也可能不传递的参数。如果没有传递参数值
在调用者中,它们默认为 null。
- 如果这些参数中的任何一个
不为空,它们应该用在 select 的 where 子句中
(
spFetch
) 中的语句到 return 过滤结果。
- 我有一个前端应用程序可以充当来电者,但尚未设置
关于如何传递参数一成不变(逗号分隔
列表、明确引用等)
这里的想法是,在后端我可以限制可能的查询参数,同时仍然允许广泛的参数。
如何写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'
场景:
- 我有一个存储过程 (
spFetch
),我想 return 一个列表 来自 table 的结果。 - 存储过程(
spFetch
)定义了一些 调用者可能传递也可能不传递的参数。如果没有传递参数值 在调用者中,它们默认为 null。 - 如果这些参数中的任何一个
不为空,它们应该用在 select 的 where 子句中
(
spFetch
) 中的语句到 return 过滤结果。 - 我有一个前端应用程序可以充当来电者,但尚未设置 关于如何传递参数一成不变(逗号分隔 列表、明确引用等)
这里的想法是,在后端我可以限制可能的查询参数,同时仍然允许广泛的参数。
如何写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'