我有一些搜索功能(存储过程),需要返回结果完全相同的列。您应该使用临时表在存储过程之间传递数据吗?
这是已采取的方法:
每个存储过程具有以下一般结构:
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个存储过程。
我都赞成第一种方法,但我只是想知道第二种方法有什么好处。性能?
还是有第三种方法?