Операция | Назначение |
= | Присвоить значение |
=default | Присвоить значение по умолчанию |
+= | Присвоить сумму (конкатенацию для символьных данных) |
-= | Присвоить разницу |
*= | Присвоить произведение |
/= | Присвоить частное |
%= | Присвоить остаток от деления |
&= | Присвоить результат побитового логического AND |
^= | Присвоить результат побитового логического XOR |
|= | Присвоить результат побитового логического OR |
На рис. 10.3 приведен пример оператора UPDATE, в секции SET которого содержатся два разделенных запятой выражения. Первое выражение интерпретируется как запись в столбец AUDITORIUM_ CAPACITY произведения значения столбца AUDITORIUM_ CAPACITY на число 1.2. Второе – как запись в столбец AUDITORIUM_ NAME результата конкатенации значения столбца AUDITORIUM_ NAME со строкой +20%.
Рис. 10.3. Изменение значений в столбцах AUDUTORIUM_ CAPACITY
и AUDITORIUM_ NAME во всех строках таблицы AUDITORIUM
Рис. 10.4. Применение ключевого слова DEFAULT для изменения значений
в столбцах GENDER и PULPIT таблицы TEACHER
Пример на рис. 10.4 демонстрирует операцию присвоения значения по умолчанию для столбцов PULPIT и GENDER таблицы TEACHER (рис. 10.5).
Рис. 10.5. Информация о структуре и свойствах таблицы TEACHER
Секция FROM
Принцип применения секции FROM оператора UPDATE аналогичен принципу применения второй секции FROM оператора DELETE: строки целевой таблицы, связанные JOIN-соединением с другими таблицами, являются исходными для выполнения изменений, определенных выражениями в секции SET. В том случае, если в операторе UPDATE секция FROM не используется, это равносильно секции FROM, в которой указывается только одна целевая таблица.
На рис. 10.6, 10.7 приведен пример, демонстрирующий применение секции FROM оператора UPDATE.
Вначале (рис. 10.6) c помощью конструкции SELECT … INTO создается временная таблица с именем #Механики_с_оценкой<10, которая заполняется строками, сформированными в результате многотабличного SELECT-запроса с последующей WHERE-фильтрацией. Второй оператор SELECT выводит значения в столбце NOTE таблицы PROGRESS из строк, связанных JOIN-соединением с строками временной таблицы.
Затем (рис. 10.7) выполняется оператор UPDATE, использующий в секции FROM JOIN-соединение с временной таблицей, аналогичное применяемому во втором SELECT-запросе на рис. 10.6. Выражение в секции SET увеличивает значение в столбце NOTE на 1. Второй оператор SELECT на рис. 10.7 совпадает со вторым SELECT-оператором на рис. 10.5 и демонстрирует результат успешного выполнения оператора UPDATE.
Рис. 10.6. Формирование временной таблицы, для применения в секции
FROM оператора UPDATE
Рис. 10.7. Применение секции FROM оператора UPDATE
Секция WHERE
Секция WHERE выполняется после секции FROM и содержит логическое выражение для фильтрации ее результирующего набора строк. Если секция FROM не применяется, то логическое выражение используется для фильтрации строк целевой таблицы. Отобранные таким образом строки изменяются в соответствии с выражениями в секции SET.
На рис. 10.8 представлен пример оператора UPDATE, использующего секцию WHERE. При этом в секции WHERE применяется коррелированный подзапрос к временной таблице, созданной в сценарии, показанном на рис. 10.6. Псевдоним целевой таблицы для применения его в подзапросе можно задать в секции FROM (рис. 10.9).
Рис. 10.8. Применение секции WHERE с коррелируемым подзапросом
в операторе UPDATE
Рис. 10.9. Применение псевдонима целевой таблицы в секции WHERE
оператора UPDATE
Обратите внимание на то, что результат выполнения операторов UPDATE, представленных на рис. 10.8 и 10.9 аналогичен результату выполнения оператора UPDATE на рис. 10.7.
Совместное применение секций FROM и HERE (рис. 10.10) позволяет избежать создания временной таблицы (рис. 10.6, 10.7) и получить аналогичный результат.
Рис. 10.10. Совместное использование секций FROM и WHERE оператора UPDATE
Опция TOP
Как и в других DML-операторах, опция TOP позволяет ограничить количество строк, на которое распространяется действие оператора. На рис. 10.11 приведен пример оператора UPDATE, изменяющего только три первые, выбранные с помощью секций FROM и WHERE, строки.
Рис. 10.11. Применение опции TOP оператора UPDATE
Как и в случае с оператором DELETE, количество строк может быть задано в процентах. Кроме того, следует помнить, что в общем случае невозможно заранее предугадать, какие строки будут выбраны для изменения.
Секция OUTPUT
На рис. 10.12 и 10.13 приведены примеры использования секции OUTPUT для формирования результирующего набора в стандартный поток вывода (рис. 10.12) и во временную таблицу (рис. 10.13).
Рис. 10.12. Применение секции OUTPUT оператора UPDATE
Рис. 10.13. Применение секции OUTPUT оператора UPDATE с выводом
результирующего набора во временную таблицу
Применение секции OUTPUT аналогично ее применению в других DML-операторах. Единственное отличие заключается в возможности использования префиксов INSERTED и DELETED (рис. 10.12. 10.13) в выражениях секции. С помощью INSERTED можно вывести в результирующий набор новые значения (измененные) в столбцах таблицы, а с помощью DELETED – старые (до изменения).
Дата: 2019-02-25, просмотров: 237.