2

我现在正在查看似乎遵循以下行为的 sproc

DECLARE @tablevar TABLE
(
    FIELD1   int,
    FIELD2   int,
    FIELD3   varchar(50),
    -- etc
)

INSERT INTO @tablevar
(
    FIELD1,
    FIELD2,
    FIELD3,
    -- etc
)
SELECT FIELD1, FIELD2, FIELD3, -- etc
FROM
TableA Inner Join TableB on TableA.Foo = TableB.Foo
Inner Join TableC on TableB.Bar = TableC.Bar
-- Where, Order By, etc.

Select FIELD1, FIELD2, FIELD3, -- etc
FROM @tablevar

与使用普通的 select 语句并跳过表变量相比,使用这种方法有什么好处吗?

4

2 回答 2

7

如果您打算完全按照发布的方式使用它(填充它然后选择结果),那么您将一无所获。您只是在对 SQL Server 征税,需要更多的 CPU 和内存使用。

如果您打算对 table 变量做更多的事情,答案会改变,并且取决于您如何使用它。如果它将保存少量数据,那么在后续语句中使用它可能会更有效。如果您打算多次使用它并且初始人口很昂贵,那么它可能更有效。

我一直在说也许,因为每种情况都不同,您需要进行测试以查看它是否有所作为。

于 2010-08-10T20:57:10.877 回答
2

如果您所做的只是填充表格并从中选择,我认为这样做没有任何好处

于 2010-08-10T20:55:42.863 回答