Використовувати параметри, що оцінюються таблицею (механізм бази даних)

СТОСУЄТЬСЯ: SQL Server Azure База даних SQL Azure Synapse Analytics Паралельний склад даних

оцінюються

Параметри, що мають значення таблиці, оголошуються за допомогою визначених користувачем типів таблиць. Параметри, що мають значення таблиці, можна використовувати для надсилання декількох рядків даних до оператора Transact-SQL або підпрограми, наприклад, збереженої процедури або функції, без створення тимчасової таблиці або багатьох параметрів.

Параметри, що мають значення таблиці, схожі на масиви параметрів у OLE DB та ODBC, але пропонують більшу гнучкість та більш тісну інтеграцію з Transact-SQL. Параметри, що оцінюються за допомогою таблиці, також мають перевагу можливості брати участь в операціях на основі наборів.

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

У цій темі:

Переваги

Параметр, що має значення таблиці, масштабується до збереженої процедури, функції або динамічного тексту Transact-SQL, як і інші параметри. Аналогічно, змінна типу таблиці має область дії, як і будь-яка інша локальна змінна, яка створюється за допомогою оператора DECLARE. Ви можете оголосити табличні значення змінних у динамічних операторах Transact-SQL і передати ці змінні як таблично-значущі параметри до збережених процедур та функцій.

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

  • Не отримуйте блокування для початкової сукупності даних від клієнта.
  • Надайте просту модель програмування.
  • Дозволяє включити складну ділову логіку в єдину процедуру.
  • Скоротіть зворотні поїздки на сервер.
  • Може мати структуру таблиці різної потужності.
  • Сильно набрані.
  • Дозвольте клієнту вказати порядок сортування та унікальні ключі.
  • Кешуються як тимчасова таблиця при використанні в збереженій процедурі. Починаючи з SQL Server 2012 (11.x), параметри з табличним значенням також кешуються для параметризованих запитів.

Дозволи

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

Обмеження

Параметри, що мають значення таблиці, мають такі обмеження:

  • SQL Server не підтримує статистику стовпців табличних параметрів.
  • Параметри, що мають значення таблиці, повинні передаватися як вхідні параметри READONLY у підпрограми Transact-SQL. Ви не можете виконувати операції DML, такі як UPDATE, DELETE або INSERT, над табличним параметром у тілі процедури.
  • Ви не можете використовувати табличний параметр як ціль оператора SELECT INTO або INSERT EXEC. Параметр, що має значення таблиці, може знаходитись у реченні FROM SELECT INTO або в рядку INSERT EXEC або збереженій процедурі.

Параметри, що оцінюються таблицею, проти операцій BULK INSERT

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

Параметри, що мають значення для таблиці, які використовуються повторно, отримують вигоду від тимчасового кешування таблиці. Це кешування таблиці забезпечує кращу масштабованість, ніж еквівалентні операції BULK INSERT. Використовуючи невеликі операції вставки рядків, можна отримати невелику перевагу продуктивності, використовуючи списки параметрів або пакетні оператори замість операцій BULK INSERT або табличних параметрів. Однак ці методи менш зручні для програмування, і продуктивність швидко зменшується зі збільшенням рядків.

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

Приклад

У наступному прикладі використовується Transact-SQL і показано, як створити тип параметра, що має значення таблиці, оголосити змінну для посилання на неї, заповнити список параметрів, а потім передати значення збереженій процедурі в базі даних AdventureWorks.