架构:在SQL中,查询过滤数据集的最佳方法是什么?

时间:2013-01-07 10:49:35

标签: sql sql-server stored-procedures parameters

在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

另一种方式?

1 个答案:

答案 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将需要许多新过程。