まったく同じ列の結果を返す必要のある検索関数(ストアドプロシージャ)がいくつかあります。
これが採用されたアプローチです。
各ストアドプロシージャの一般的な構造は次のとおりです。
CREATE TABLE #searchTmp (CustomerID uniqueIdentifier)
INSERT INTO #searchTmp
SELECT C.CustomerID FROM /**** do actual search here, based
on stored proc arguments ****/
EXEC spSearchResults
DROP TABLE #searchTmp
上記では、spSearchResultsはselectで#searchTmpテーブルを使用します。spSearchResultsは常に同じ列のテーブルを返し、かなりの数の結合がありました。
ただし、一時テーブルを使用するよりも、次のアプローチの方が適しています。
SELECT col1, col2, col3, col4, .... etc, lots of columns ...
FROM table1 LEFT JOIN table 2 ON ... etc, lots of joins ...
WHERE ... DO ACTUAL SEARCH HERE ...
10の異なる検索を行う場合(たとえば、郵便番号に基づいて顧客を検索する、名前に基づいて1つの検索を行うなど)、この2番目のアプローチは、指定された列と結合の重複が多いことを意味します。検索関数を使用するコードが変更されて、新しい列を返す必要がある場合は、10個のストアドプロシージャを更新する必要があります。
私はすべて最初の方法に賛成ですが、2番目の方法がどのような利点をもたらすのか疑問に思いました。パフォーマンス?
または、3番目の方法はありますか?