Использование табличных переменных в хранимых процедурах вместо простого выбора из таблиц или представления?

Сейчас я смотрю на звезд, которые следуют поведению, показанному ниже.

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 и пропуском табличной переменной?

2 ответа

Решение

Если вы планируете использовать его точно так же, как опубликовано (заполнить его, а затем выбрать результат), вы ничего не получите. Вы просто облагаете налогом свой SQL Server, требуя больше ресурсов процессора и памяти.

Ответ меняется, если вы планируете делать больше с табличной переменной, и зависит от того, как вы можете его использовать. Если он будет содержать небольшой объем данных, может быть более эффективно использовать его в последующих операторах. Если вы намереваетесь использовать его несколько раз, а первоначальное население стоит дорого, то это может быть более эффективным.

Я продолжаю говорить, может быть, поскольку каждая ситуация отличается, и вам нужно будет проверить, чтобы увидеть, если это имеет значение.

Я не вижу никакой пользы в этом, если все, что вы делаете, это заполняете таблицу и выбираете из нее

Другие вопросы по тегам