関数の1つでSQLロジックを最適化するための支援が必要です。ストアドプロシージャは使用できませんのでご注意ください。
これが私のテーブルです。多くのレコードを含む@MainTableを使用して初期化されます。
DECLARE TABLE @ResultTable
(
ResultValue INT
)
これらはいくつかのパラメータを格納するテーブルです-それらも空にすることができます。
DECLARE TABLE @ParameterOne (ParameterOne INT)
DECLARE TABLE @ParameterTwo (ParameterOne NVARCHAR(100))
...
DECLARE TABLE @ParameterN(ParameterN TINYINT)
ここで、@ MainTableからいくつかのレコードのみを選択するために、多くのテーブルを@MainTableに結合する必要があります。選択されるレコードは、パラメータテーブルに保存されている情報によって異なります。
だから、私の現在の解決策は次のとおりです。
INSERT INTO ResultTable(ResultValue)
SELECT ResultValue
FROM MainTable M
INNER JOIN @MainOne MO
ON M.ID=MO.ID
....
INNER JOIN @MainN MN
ON M.IDN=MN.ID
WHERE (EXISTS (SELECT 1 FROM @ParameterOne WHERE ParameterOne=MO.ID) OR NOT EXISTS (SELECT 1 FROM @ParameterOne))
AND
...
AND
(EXISTS (SELECT 1 FROM @ParameterN WHERE ParameterN=MN.Name) OR NOT EXISTS (SELECT 1 FROM @ParameterN ))
したがって、パラメータテーブルの現在の基準に一致する場合にのみレコードを追加するという考え方です。
プロシージャを使用して動的クエリを作成できないため、パラメータテーブルごとにEXISTSとNOTEXISTSの組み合わせでWHERE句を使用しています。
問題は、パラメータテーブルを追加するときに動作が遅くなることです。どのパラメータテーブルにレコードがあるかをチェックする多くのIF/ELSEステートメントを使用せずにこれを行う他の方法はありますか?それは関数をはるかに大きくし、読み取りを困難にします。
そして、アイデアやアドバイスを歓迎します。