我有许多搜索函数(存储过程),它们需要返回具有完全相同列的结果。
这是采取的方法:
每个存储过程都具有一般结构:
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 在选择中使用#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 种不同的搜索要做(例如,根据邮政编码搜索客户,根据姓氏搜索等),第二种方法意味着有很多重复的列和指定的连接。如果使用搜索函数的代码发生变化,需要返回一个新列,那么就有 10 个存储过程需要更新。
我完全赞成第一种方法,但我只是想知道第二种方法有什么好处。表现?
还是有第三种方法?