0

SQLで、フィルタリングされたデータセットをクエリするための最良の方法は何ですか?

私は2つの解決策を想像しましたが、どちらが長所と短所であるかを知りたいと思います。

解決策1

パラメータ内のフィルタを使用して、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が最適だと思います。1つ以上のパラメーターを使用してフィルター処理できます。パラメーターのデフォルト値を設定するか、特定のパラメーターでフィルター処理したくない場合はnull値を渡すことができます。次に、フィルタークエリは次のように記述できます。

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では、フィルターオプションをさらに追加したり、たとえば、パラメーター2と3で同時にフィルター処理したりする場合、多くの新しい手順が必要になります。

于 2013-01-07T11:06:13.433 に答える