@table_variable або #temp_table


11

У мене є велика змінна тип таблиці, визначена користувачем, яка містить 129 стовпців. Я буду зберігати близько 2000-3000 записів у цій змінній таблиці одночасно і передавати їх у різні збережені процедури та функції, щоб отримати додаткові дані та внести зміни. Ці додаткові дані та нові модифікації будуть зберігатися в новій змінній таблиці того ж типу та повертатися до вихідної збереженої процедури через OUTPUTпараметр. (Це тому, що параметр типу таблиці може передаватися лише як READONLY.)

Це мій псевдо-код:

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

Чи варто використовувати @table_variableабо #temp_table?


Відповіді:


12

Ви маєте переглянути два блоги. Перший ( тут ) - це порівняння табличних змінних та тимчасових таблиць. Це з 2008 року і залишається актуальним для SQL Server 2008 R2.

Другий запис у блозі ( тут ) стосується деяких помилок (пропущених уявлень) щодо змінних таблиць; включаючи індексацію змінної таблиці.

Обидва ці записи в блозі, статті, написав Гейл Шоу.

Я вважаю, що шукаючий елемент, який ви шукаєте, - це змінна таблиця не може бути передана між збереженими процедурами, тоді як таблиця темпів може бути передана між збереженими процедурами. Найближча таблична змінна, що переходить між збереженими процедурами, - це тип таблиці, визначений користувачем.

Передача змінної таблиці як TVP до збереженої процедури має вимогу, вона повинна бути визначена як параметр READ-ONLY. Це означає, що для повернення модифікованої копії її буде декілька копій Табличної змінної.

Все сказане, проходячи між збереженою процедурою, може бути краще обслуговуватися таблицею темпів, коли ви хочете повернути передану структуру з оновленими значеннями.


5

Нічого кращого, ніж спробувати обидва, але я вважаю, що #tempTables краще працює, як тільки ви потрапите в сотні записів.


3
Додайте до цього той факт, що тимчасові таблиці можуть мати індекси, мати статистику, тоді як змінні таблиці можуть мати лише ПК. Ви маєте тут деякі деталі .
Маріан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.