Update sql примеры. SQL. Синтаксис команды UPDATE. Общее решение с динамическим SQL

Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет следующий синтаксис:

UPDATE SET { = { | NULL | DEFAULT},...} [ {WHERE }];

С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.

Если столбец допускает NULL-значение, то его можно указать в явном виде. Кроме того, можно заменить имеющееся значение на значение по умолчанию (DEFAULT) для данного столбца.

Примеры оператора SQL UPDATE

Имеется следующая таблица Planets:

Пример 1. С помощью оператора SQL UPDATE изменим название планеты Neptune на Pluton :

UPDATE Planets SET PlanetName = "Pluton" WHERE ID = 3;

В этом примере условие оператора SQL WHERE является обязательным, так как без него все поля столбца PlanetName во всей таблице изменились бы на Pluton. В данном случае, нам приходит на помощь столбец ID, т.к. он является Первичным ключом, позволяющим однозначно идентифицировать запись.

Пример 2. Увеличим зарплату всех учителей в 2 раза, а премию - в 10 раз.

Последнее обновление: 13.07.2017

Для изменения уже имеющихся строк в таблице применяется команда UPDATE . Она имеет следующий формальный синтаксис:

UPDATE имя_таблицы SET столбец1 = значение1, столбец2 = значение2, ... столбецN = значениеN

Например, увеличим у всех товаров цену на 5000:

UPDATE Products SET Price = Price + 5000

Используем критерий, и изменим название производителя с "Samsung" на "Samsung Inc.":

UPDATE Products SET Manufacturer = "Samsung Inc." WHERE Manufacturer = "Samsung"

Более сложный запрос - заменим у поля Manufacturer значение "Apple" на "Apple Inc." в первых 2 строках:

UPDATE Products SET Manufacturer = "Apple Inc." FROM (SELECT TOP 2 FROM Products WHERE Manufacturer="Apple") AS Selected WHERE Products.Id = Selected.Id

С помощью подзапроса после ключевого слова FROM производится выборка первых двух строк, в которых Manufacturer="Apple". Для этой выборки будет определен псевдоним Selected. Псевдоним указывается после оператора AS .

Далее идет условие обновления Products.Id = Selected.Id . То есть фактически мы имеем дело с двумя таблицами - Products и Selected (которая является производной от Products). В Selected находится две первых строки, в которых Manufacturer="Apple". В Products - вообще все строки. И обновление производится только для тех строк, которые есть в выборке Selected. То есть если в таблице Products десятки товаров с производителем Apple, то обновление коснется только двух первых из них.

Платформа SQL Server поддерживает большинство основных компонентов инструкции UPDATE стандарта ANSI, но не поддерживаются ключевые слова ONLY и ARRAY и не поддерживается возможность обновления массивов. В SQL Server функциональность инструкции UPDATE была расширена путем добавления подсказок по таблице при помощи предложения WITH, добавления подсказок по запросу при помощи предложения OPTION, а также введена более надежная обработка переменных. Синтаксис следующий.

UPDATE {имя_таблицы | имя_представления | набор-строк} )] SET {имя_столбца={DEFAULT | NULL | скалярное_выражение} |

имя стременной=скалярное_выражение| имя_переменной=имя_столбца=скалярное_выражение} [, …] ]

WHERE {условия | CURRENT OF имя_курсора) )]

Синтаксические элементы инструкции UPDATE в SQL Server следующие.

WITH подсказка

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

имя_переменной

Переменные SQL Server должны быть объявлены до использования инструкции UPDATE, в форме DECLARE @переменная. Конструкция SET @переменная=столбец!=выражение! устанавливает для переменной значение, равное окончательному значению обновленного столбца, а конструкция SET @переменная -столбец!, столбец!=выражение устанавливает для переменной значение, равное значению в столбце до выполнения инструкции UPDATE.

Предоставляет возможность создать для указания обновляемых строк высокоизбирательный критерий на основе соединения. Предложение FROM не нужно, если при указании строк используется только одна таблица - целевая. Функции для работы с наборами строк (rowset functions) в SQL Server описываются в разделе «Инструкция SELECT».

AS псевдоним

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

Предоставляется возможность использовать стандартный синтаксис ANSI для соединений таблиц совместно с предложением FROM.

Небольшая вариация предложения 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 authors SET state="ZZ" FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.au_id=t1.au_.id

В этом примере важно обратить внимание на то, что, как правило, довольно сложно обновить первые п записей при помощи инструкции UPDATE, если нет какой-нибудь явной последовательности строк, которую можно определить при помощи предложения WHERE. Однако вложенный табличный подзапрос в предложении FROM, использующий ключевое слово ТОР для получения первых 10 записей, помогает не тратить силы на дополнительное программирование, которое иначе было бы необходимо.

Команда UPDATE — производит изменения в уже существующей записи или во множестве записей в таблице SQL . Изменяет существующие значения в таблице или в основной таблице представления.

Команда UPDATE Синтаксис команды

Синтаксис команды UPDATE

Команда UPDATE. Основные ключевые слова и параметры команды UPDATE

  • schema - идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view - имя таблицы SQL , в которой изменяются данные; если определяется представление, данные изменяются в основной таблице SQL представления
  • subquery_1 - подзапрос , который сервер обрабатывает тем же самым способом как представление
  • с olumn - столбец таблицы SQL или представления SQL , значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
  • expr - ; это выражение может содержать главные переменные и необязательные индикаторные переменные
  • subquery _2 - новое значение, назначаемое соответствующему столбцу
  • subquery _3 - новое значение, назначаемое соответствующему столбцу

WHERE - определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE ; если опускается эта фраза, модифицируются все строки в таблице или представлении.
При выдаче утверждения включается любой UPDATE-триггер , определенный на таблице.
Подзапросы . Если предложение SET содержит подзапрос , он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL . Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы .

Команда UPDATE Пример 1
Изменение для всех покупателей рейтинга на значение, равное 200:

Customers SET rating = 200;

Команда UPDATE Пример 2
Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде , как и в команде DELETE , можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:

Customers SET rating = 200 WHERE snum = 1001;

Команда SQL UPDATE Пример 3
В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:

Emp SET job = ‘MANAGER’, sal = sal + 1000, deptno = 20 WHERE ename = ‘JONES’;

Команда UPDATE Пример 4
В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:

Customers SET rating = NULL WHERE city = ‘London’;

Команда UPDATE Пример 5
Поясняет использование следующих синтаксических конструкций команды :

  • Обе формы предложения SET вместе в одном утверждении.
  • Подзапрос.
  • Предложение WHERE, ограничивающее диапазон модифицируемых строк.

Emp a SET deptno =
(SELECT deptno FROM dept WHERE loc = ‘BOSTON’), (sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno) WHERE deptno IN (SELECT deptno FROM dept WHERE loc = ‘DALLAS’ OR loc = ‘DETROIT’);

Вышеупомянутое утверждение выполняет следующие операции:

  • Модифицирует только тех служащих, кто работают в Dallas или Detroit
  • Устанавливает значение колонки deptno для служащих из Бостона
  • Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
  • Устанавливает комиссионные каждого служащего в 1.5 раза больше средних комиссионных всего отдела

Что если я спрошу: "Все ли обновления установлены на ваш SQL Server?"

Как ответить на такой вопрос? Заглянуть в центр обновления Windows? Это вряд ли поможет. Скорее всего вы увидите там вот такую картину:

Но, как ни странно, это вовсе не означает, что на SQL Server установлены самые свежие обновления!

Для отслеживания обновлений именно для SQL-сервера Микрософт создал специальную страничку — . Положите её себе в закладки:

Но прежде чем идти туда, необходимо выяснить, какая версия установлена у нас прямо сейчас. Нам нужен точный номер, включающий в себя номер построения (build number). Получить его можно посмотрев на системную переменную @@Version :

Запомните эти цифры — только по ним мы сможем определить какие обновления у нас уже установлены, а какие — нет. SQL-сервер, в отличие от операционной системы сам не сообщает нам о каждом установленном обновлении. Поэтому придётся работать с номером @@Version .

Теперь заходим в центр обновления SQL-сервера и видим там удобную табличку:

Здесь нам понадобятся три вещи:

  • Во-первых, запомним номер построения, соответствующий этому обновлению. По окончании процедуры обновления @@Version нашего SQL-сервера должна выдавать именно такой номер.
  • Во-вторых, обязательно следует посмотреть историю номеров построений, соответствующих обновлениям с последнего сервисного пакета. Это важно, потому что накопительное обновление установится только на предшествующий ему сервисный пакет.
  • И в-третьих, полезно посмотреть список исправлений, содержащихся в накопительном пакете. Администратор должен быть в курсе изменений, вносимых этим пакетом.

Посмотрев номера построений предшествующих обновлений, мы увидим, что разрыв в номерах по сравнению с нашей текущей версией подозрительно большой:

Это из-за того, что у нас не установлен сервисный пакет SP1. Придётся сначала поставить его.

И вот теперь у нас есть план действий:

  1. Устанавливаем сервисный пакет SP1.
  2. Устанавливаем накопительный пакет обновлений CU4.

Действуем! После установки SP1 проверяем номер @@Version . С исходного 2100.60 он увеличился до 3000.0.



В продолжение темы:
Инсулин

Все Знаки Зодиака отличаются друг от друга. В этом нет никаких сомнений. Астрологи решили составить рейтинг самых-самых Знаков Зодиака и посмотреть, кто же из них в чем...

Новые статьи
/
Популярные