SeaJey (seajey) wrote,
SeaJey
seajey

  • Location:
  • Mood:
  • Music:

Тяжёлые табличные функции

Недавно выяснил интересный момент: если табличная функция возвращает большое количество записей и нам в последствии нужно делать JOIN к другим таблицам, то предпочтительней использовать следующий метод.

Создаём временную таблицу:

CREATE #WorkingTable TABLE
(
ID int,
Value float
)

Создаём кластерный индекс по таблице:

CREATE CLUSTERED INDEX #table_index1 ON #WorkingTable(ID)

Забираем данные из табличной функции:

INSERT INTO #WorkingTable
(
ID,
Value
)
SELECT
f.ID,
f.Value
FROM dbo.fSelectData(@inID) AS f

Делаем итоговую выборку с джойном на нужный справочник:

SELECT
st.FullDescription,
wt.Value
FROM #WorkingTable AS wt
INNER JOIN SomeTable AS st ON st.ID = wt.ID

Правда, на мой наивный взгляд, заморачиваться с отдельной временной таблицей стоит, только если табличная функция выдаёт большой объём данных (десятки тысяч записей и больше).

Кросспост отсюда. Комментировать можно здесь и на DW. Количество комментов там: comment count unavailable
Tags: mssql, sql, t-sql, useful
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments