0

在 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

另一种方式?

4

1 回答 1

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 将需要大量新过程。

于 2013-01-07T11:06:13.433 回答