Использование табличных переменных в хранимых процедурах вместо простого выбора из таблиц или представления?
Сейчас я смотрю на звезд, которые следуют поведению, показанному ниже.
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, требуя больше ресурсов процессора и памяти.
Ответ меняется, если вы планируете делать больше с табличной переменной, и зависит от того, как вы можете его использовать. Если он будет содержать небольшой объем данных, может быть более эффективно использовать его в последующих операторах. Если вы намереваетесь использовать его несколько раз, а первоначальное население стоит дорого, то это может быть более эффективным.
Я продолжаю говорить, может быть, поскольку каждая ситуация отличается, и вам нужно будет проверить, чтобы увидеть, если это имеет значение.
Я не вижу никакой пользы в этом, если все, что вы делаете, это заполняете таблицу и выбираете из нее