【发布时间】:2009-11-12 13:27:26
【问题描述】:
我有许多搜索函数(存储过程),它们需要返回具有完全相同列的结果。
这是采取的方法:
每个存储过程都有一般结构:
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 个存储过程需要更新。
我完全赞成第一种方法,但我只是想知道第二种方法有什么好处。表现?
或者有第三种方法吗?
【问题讨论】:
标签: sql performance temp-tables