条件1:
WHERE
...
(@A IS NULL OR COL1 = @A)
条件2:
検索条件のAND/OR切替@Aが1の場合COL1=@B AND COL2=@C,@Aが2の場合COL1=B OR COL2=@Cを指定する。
WHERE
...
((@A = 1 AND (COL1 = @B AND COL2 = @C)) OR
(@A = 2 AND (COL1 = @B OR COL2 = @C)))
条件3:
ソート順 @Aが1ならCOL1,COL2 @Aが2なら COL3 降順,COL4
ORDER BY
CASE @A WHEN 1 THEN ROW_NUMBER() OVER (ORDER BY COL1,COL2)
WHEN 2 THEN ROW_NUMBER() OVER (ORDER BY COL3 DESC,COL4)
END
こんなのでうまくいくのかな?
ダメだった。条件1をやると、インデックスを使ってくれない。開発者には、「処理中は固定のものだから速度は遅くならないはず」と答えたのにこのありさま。。。あ~あ、またひとつメッキがはがれた感じ。SQL Server2005はそんなに賢くないのかな?
さらにダメダメでした。
全部だ~め。
理由は、非効率なクエリプランができるためです。で、なんでそうなるかというと、、、最近買ったインサイドSQL Server2005に書いてありました。あの本では、ダメな理由と、代替策として、パラメタライズドクエリを組み立てて実行する方法が紹介されていました。
あ~あ。
0 件のコメント:
コメントを投稿