2013-01-07 47 views
0

在SQL中查詢過濾數據集的最佳方法是什麼?架構:在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

Erland Sommarskog的[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)是一個很好的閱讀,如果通過SQL您實際上是指SQL Server(SQL是一種語言,由不同供應商在各種產品中實施,每種產品都有單獨的標籤) –

回答

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將需要大量的新程序。

相關問題