SQLServer2000をSQLServer2008へ移行させたら、一部のストアドが壮絶に遅くなりタイムアウトするようになった。数秒の処理が数分の処理になるほど。
えー!、ということで調査してみた。(してもらった)。

原因はストアドのパラメータを、ストアドの内部で変更していたために最適化が効かない、ということだった。



CREATE PROC SP_TEST
@CD1 VARCHAR(10),
@CD2 VARCHAR(10)
AS

SET @CD1='XXXX1' <-- NG
SET @CD2='XXXX2' <-- NG

SELECT ...
WHERE CD BETWEEN @CD1 AND @CD2
GO

内部で@CD1,@CD2を変更するのはダメよ。ということらしい。

OPTION RECOMPILEという手段もあるらしい。