在SQL中,查询过滤数据集的最佳方法是什么?
我想象了两个解决方案,我想知道其中一个是什么优点和缺点。
解决方案1
我使用参数
中的过滤器创建了一个独特的过程CREATE PROCEDURE [dbo].[usp_GetByFilter]
(
-- Pagination
@p_Offset int,
@p_FetchNext int,
-- Filters
@p_Param1 nvarchar(255),
@p_param2 uniqueidentifier,
@p_param3 uniqueidentifier
)
解决方案2
我通过参数
创建一个过程CREATE PROCEDURE [dbo].[usp_GetByParam1]
(
-- Pagination
@p_Offset int,
@p_FetchNext int,
-- Filters
@p_Param1 nvarchar(255)
)
CREATE PROCEDURE [dbo].[usp_GetByParam2]
(
-- Pagination
@p_Offset int,
@p_FetchNext int,
-- Filters
@p_param2 uniqueidentifier
)
CREATE PROCEDURE [dbo].[usp_GetByParam3]
(
-- Pagination
@p_Offset int,
@p_FetchNext int,
-- Filters
@p_param3 uniqueidentifier
)
解决方案3
另一种方式?
答案 0 :(得分:2)
我认为解决方案1是最好的:它允许您使用一个或多个参数进行过滤:您可以为参数设置默认值,或者在您不希望按某个参数进行过滤时传递空值。然后可以用这种方式编写过滤器查询:
SELECT
--your output
FROM
Table t
WHERE
--some conditions AND
( @p_Param1 is null OR t.column1 = @p_Param1 ) AND
( @p_Param2 is null OR t.column2 = @p_Param2 ) AND
( @p_Param3 is null OR t.column3 = @p_Param3 )
如果您想添加更多过滤器选项,或者例如同时按参数2和3过滤,解决方案2将需要许多新过程。