Інструкція UPDATE поради та хитрощі SQL Server - SQL програмування
Платформа SQL Server підтримує більшість основних компонентів інструкції UPDATE стандарту ANSI, але не підтримуються ключові слова ONLY та ARRAY та не підтримується можливість оновлення масивів. У SQL Server функціональність інструкції UPDATE була розширена шляхом додавання підказок по таблиці за допомогою пропозиції WITH, додавання підказок на запит за допомогою пропозиції OPTION, а також введена більш надійна обробка змінних. Синтаксис наступний.
ім'я стременной=скалярное_выражение имя_переменной=имя_столбца=скалярное_выражение> [, …] [FROM
уявлення! вкладена_таблиця1 набір рядків!) [, …]]
Синтаксичні елементи інструкції UPDATE у SQL Server такі.
WITH підказка
Дозволяє використовувати підказки за таблицями, замінюючи задану за умовчанням поведінку оптимізатора запитів. Оскільки оптимізатор запитів дуже добре вибирає плани обробки, використовуйте підказки лише в тому випадку, якщо ви дуже добре розумієте таблиці, індекси та дані, які стосуються операції. Якщо такого розуміння немає, використання підказок може призвести не до збільшення, а зменшення продуктивності.
ім'я_змінної
Змінні SQL Server повинні бути оголошені до використання інструкції UPDATE у формі DECLARE @ змінна. Конструкція SET @ змінна = стовпець! = вираз! встановлює для змінної значення, що дорівнює остаточному значенню оновленого стовпця, а конструкція SET @ змінна - стовпець!, стовпець! = вираз встановлює для змінної значення, що дорівнює значенням у стовпці до виконання інструкції UPDATE.
FROM
Надає можливість створити для вказівки рядків високовиборчийкритерій з урахуванням з'єднання. Пропозиція FROM не потрібна, якщо при вказівці рядків використовується лише одна таблиця - цільова. Функції роботи з наборами рядків (rowset functions) в SQL Server описуються у розділі «Інструкція SELECT».
AS псевдонім
Дозволяє присвоїти легкий у використанні псевдонім таблиці, уявленню, вкладеному табличному підзапиту або функції для роботи з наборами рядків.
JOIN
Надається можливість використовувати стандартний синтаксис ANSI для з'єднань таблиць разом із пропозицією FROM.
GLOBAL
Невелика варіація пропозиції WHERE CURRENT OF стандарту ANSI. Пропозиція WHERE CURRENT OF ім'я курсора, що використовується в комбінації з курсором, змушує платформу SQL Server оновити лише один запис, на якому зараз розташований курсор. Передбачається, що курсор є локальним, але можна вказати глобальний курсор, використовуючи ключове слово GLOBAL.
OPTION підказка
Дозволяє використовувати підказки щодо запитів, змінюючи задану за умовчанням поведінку оптимізатора запитів. Як і у випадку з пропозицією WITH, використовуйте підказки лише в тому випадку, якщо ви дуже добре розумієте таблиці, індекси та дані, які стосуються операції. Якщо такого розуміння немає, використання підказок може призвести не до збільшення, а зменшення продуктивності.
Головне розширення, яке вводить Microsoft SQL Server в інструкцію UPDATE стандарту ANSI - це пропозиція FROM. Пропозиція FROM дозволяє використовувати пропозицію JOIN, що значно спрощує оновлення рядків цільової таблиці шляхом зв'язування рядків, зазначених у реченні FROM, з рядками, що оновлюються компонентом UPDATE имя_таблицы. У наступному прикладі показано оновлення результатуз'єднання таблиць з використанням стилю ANSI та досить громіздкого підзапиту, а потім – оновлення з використанням пропозиції FROM SQL Server. Обидва запити виконують те саме дію, але зовсім по-різному.
Виконання такого оновлення під час використання стилю Transact-SQL зводиться до з'єднання двох таблиць - authors і titleauthor - з таблицею titles. Для виконання тієї ж операції з використанням коду ANSI потрібно спочатку знайти значення au_id в таблиці authors і передати його в таблицю titleauthor, а потім потрібно знайти значення title_id і передати його в основну інструкцію UPDATE.
У наступному прикладі оновлюється стовпець state для перших десяти записів таблиці authors.
У цьому прикладі важливо звернути увагу на те, що, як правило, досить складно оновити перші п записів за допомогою інструкції UPDATE, якщо немає якоїсь явної послідовності рядків, яку можна визначити за допомогою пропозиції WHERE. Однак вкладений табличний підзапит у реченні FROM, що використовує ключове слово ТОР для отримання перших 10 записів, допомагає не витрачати сили на додаткове програмування, яке було б інакше необхідно.
Додаткова інформація на тему
Способи та методи використання інструкції DELETE у базах даних на платформі SQL Server
Правила та методи використання інструкції GRANT у базах даних на платформі SQL Server
Правила та методи використання інструкції REVOKE у базах даних на платформі SQL Server
Поради та методи використання інструкції INSERT у базах даних на платформі SQL Server