代码之家  ›  专栏  ›  技术社区  ›  Anthony Pegram

在存储过程中使用表变量,而不是仅仅从表或视图中选择?

  •  2
  • Anthony Pegram  · 技术社区  · 14 年前

    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语句和跳过table变量相比,使用这种方法是否有好处?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Oded    14 年前

    如果您计划完全按照发布的方式使用它(填充它,然后选择结果),您将一无所获。这只会让您的SQL Server负担过重,需要更多的CPU和内存使用。

    如果您打算更多地使用表变量,答案会改变,这取决于您可能如何使用它。如果它将保存少量数据,那么在后续语句中使用它可能会更有效。如果您打算多次使用它,并且初始填充很昂贵,那么它可能会更有效。

    我一直在说也许,因为每种情况是不同的,你需要测试,以看看它是否有不同。

        2
  •  2
  •   SQLMenace    14 年前

    如果您所做的只是填充表并从中进行选择,那么这样做没有任何好处