2

私は10列のデータベースを持って
います。A,B,C,D,E,F,G,H,I,J

ここで、4つのオプションを組み合わせてデータを抽出したい場合、
つまりB,C,H,J(Bは私の主キーです)
、オプションでデータを提供するためにそれらのどれも必須ではありません。 ケース1
と言う:パラメータとして与えられ、 nullが与えられます
B,C,HJ

そのようなすべてのケースで、ネストされた if Else ステートメントを作成する必要がありますか?

それは行くので4! (factorial)= 24 cases

これに簡単なオプションはありますか???

4

2 に答える 2

1

はい。1 つのオプション (ただし、注意事項があります):

   WHERE
       (@paramA IS NULL OR Some Condition involving @paramA) AND
       (@paramB IS NULL OR Some Condition involving @paramB) AND
        ....
       (@paramH IS NULL OR Some Condition involving @paramH)

注意点として、ストアド プロシージャは、特定のパラメーター セットに適さないパラメーター スニッフィングやキャッシュされたクエリ プランの影響を受けやすくなる可能性があります。

もう 1 つのオプションは、動的 TSQL を構築することです。

@ Damien_The_Unbeliever が指摘したように: Erland Sommarskog のDynamic Search Conditions in SQLは、始めるのに最適な場所です。

于 2013-07-01T06:19:07.057 に答える
0

動的 SQL を使用してこれを行う方法の例を次に示しますが、Mitch と Demien が共有した記事を読むことを強くお勧めします。

CREATE PROCEDURE dbo.SearchProc
(
@param1 datetime,
@param2 int,
@param3 nvarchar
)
AS 
BEGIN

DECLARE @sql nvarchar(4000)
DECLARE @parameters nvarchar(300)

SET @sql = 'SELECT * FROM TableName WHERE (1=1) '

if @param1 is not null
SET @sql = @sql + ' AND TableName.Column1 = @param1'

if @param2 is not null
SET @sql = @sql + ' AND TableName.Column2 = @param2'

if @param3 is not null
SET @sql = @sql + ' AND TableName.Column3 = @param3'

SET @parameters = '@param1 datetime, @param2 int, @param3 nvarchar'

EXEC sp_executesql @sql, @parameters, @param1, @param2, @param3

END
于 2013-07-01T10:59:24.843 に答える