0

次のようなコマンドを実行する SQL Server ストアド プロシージャがあります。

SELECT TOP(25) 
     col_charname, col_axexp 
FROM 
     tbl_characters
WHERE 
     GETUTCDATE() < DATEADD(DAY, 30, col_lastlogin)
ORDER BY 
     col_axexp DESC

そして、ストアド プロシージャがオプションで .xml に別の制限を指定できるようにしたいと思いますWHERE。parameter との整数比較@par_vocation

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND col_vocation = @par_vocation
ORDER BY 
    col_axexp DESC

ただし、@par_vocationnull の場合 (または、任意の固定値を使用できる場合)、追加の制限を無視したいと思います (最初のステートメントのように機能させたい)。

T-SQLIF句を使用して両方のステートメントを同じプロシージャに含めることができることはわかっていますが、SP にはこれらのステートメントが既に多数あり、このストアド プロシージャが大きくなるのが心配です。

これを機能させる方法はありますか?

4

1 に答える 1

0

それを行うには多くの方法があります。たとえば、次のようになります。

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND col_vocation = isnull(@par_vocation, col_vocation)
ORDER BY 
    col_axexp DESC

また

SELECT TOP(25) 
    col_charname, col_axexp 
FROM 
    tbl_characters
WHERE 
    GETUTCDATE() < DATEADD(DAY,30, col_lastlogin) 
    AND (@par_vocation is null or col_vocation = @par_vocation)
ORDER BY 
    col_axexp DESC

ただし、これらのクエリの実行計画は、col_vocation = @par_vocation

于 2013-07-20T09:37:19.670 に答える