Меню

Кнопка Обновить все на панели инструментов



Инструкция UPDATE в T-SQL — обновление данных в Microsoft SQL Server

Всем привет! Сегодня в материале я расскажу о том, как происходит обновление данных в Microsoft SQL Server с использованием языка T-SQL, будет рассмотрена инструкция UPDATE. Иными словами, Вы узнаете, как изменить уже существующие данные в таблицах на SQL Server.

Ранее я уже рассказывал о том, как создаются таблицы, как они изменяются, как происходит добавление данных в эти таблицы, поэтому пришло время рассказать о том, как происходит изменение (обновление) существующих данных.

Заметка!

Упомянутые выше материалы:

Заметка! Для комплексного изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL.

Скриншот 1

  1. Как обновить данные в таблицах Microsoft SQL Server?
  2. Описание инструкции UPDATE в T-SQL
  3. Упрощенный синтаксис UPDATE
  4. Примеры использования инструкции UPDATE
  5. Исходные данные для примеров
  6. Пример обновления одного столбца всех строк таблицы
  7. Пример обновления двух столбцов и только некоторых строк таблицы
  8. Пример использования выражений в инструкции UPDATE
  9. Пример обновления данных таблицы на основе данных другой таблицы
  10. Пример обновления данных с использованием подзапроса
  11. Видео-инструкция по обновлению данных в Microsoft SQL Server

Как обновить данные в таблицах Microsoft SQL Server?

Изменить данные в таблицах Microsoft SQL Server можно с помощью:

  • Инструкции UPDATE;
  • Конструктора SQL Server Management Studio (SSMS).

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

Поэтому сегодня мы подробно поговорим об инструкции UPDATE.

Описание инструкции UPDATE в T-SQL

UPDATE – инструкция SQL, с помощью которой происходит изменение существующих данных в таблицах.

Важные моменты:

  • Если инструкция UPDATE, т.е. обновление строк, нарушает какое-нибудь ограничение или правило, или новое значение имеет несовместимый тип данных (хотя бы для одной строки), то возникнет ошибка и все изменения отменяются, никакие строки не обновляются;
  • По умолчанию инструкция UPDATE получает монопольную блокировку на целевую таблицу, которую она изменяет, это означает, что пока одна инструкция UPDATE выполняется, т.е. изменяет данные в таблице, другие инструкции не могут изменять данные в этой таблице;
  • Чтобы использовать инструкцию UPDATE, нужны соответствующие разрешения на изменение данных, а также на чтение данных, если инструкция содержит условие WHERE;
  • Если Вам нужно узнать количество строк, которые Вы обновили инструкцией UPDATE, например, для возврата в клиентское приложение или для любых других целей, то для этого Вы можете использовать функцию @@ROWCOUNT.

Упрощенный синтаксис UPDATE

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

UPDATE Целевая таблица SET Имя столбца = Значение

FROM Таблица источник

  • UPDATE – инструкция обновления;
  • Целевая таблица – таблица, данные в которой необходимо изменить;
  • SET – команда, которая задает список обновляемых столбцов. Каждый следующий столбец указывается через запятую;
  • Имя столбца – столбец, в котором расположены данные, которые необходимо изменить;
  • Значение – новое значение, на которое необходимо изменить значение столбца. Можно указывать как конкретное значение, так и расчётное выражение, функцию или подзапрос. Также можно указать ключевое слово DEFAULT, что будет означать, что столбцу необходимо присвоить значение по умолчанию;
  • FROM – секция, которая указывает таблицу, из которой необходимо взять новое значение столбца. Секция может содержать объединение JOIN;
  • Таблица источник – таблица, в которой расположено новое значение столбца;
  • WHERE – условие отбора строк, подлежащих обновлению.

Примеры использования инструкции UPDATE

Сейчас давайте рассмотрим несколько примеров SQL инструкций, которые будут обновлять данные в таблице инструкцией UPDATE.

Исходные данные для примеров

Для начала давайте определимся с исходными данными, чтобы Вы понимали, какие именно данные у нас есть, и что мы будем обновлять.

Также сразу скажу, что в качестве SQL сервера у меня выступает версия Microsoft SQL Server 2017 Express.

Следующая инструкция создает таблицы, которые мы будет использовать в примерах, и добавляет в них данные.

Скриншот 2

Пример обновления одного столбца всех строк таблицы

В этом примере мы обновим значения одного столбца, при этом никаких условий мы делать не будем, т.е. обновим все строки в таблице.

Читайте также:  Статистические данные таблицы активности

Для наглядности и удобства отслеживания внесенных изменений я буду во всех примерах перед и после UPDATE посылать простой запрос SELECT, чтобы видеть, какие данные были и какие стали.

Скриншот 3

Как видите, в итоге получился очень простой запрос на обновление, мы обновили значения в столбце ProductDescription у всех строк на «Товар».

Пример обновления двух столбцов и только некоторых строк таблицы

Теперь давайте обновим два столбца, и конкретизируем строки для обновления, т.е. мы обновим не все строки в таблице, как в предыдущем примере, а только те, которые подходят под указанное нами условие (для примера Category с идентификатором 1).

Скриншот 4

В этом случае изменились значения столбцов ProductDescription и Price в строках, в которых Category = 1.

Пример использования выражений в инструкции UPDATE

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

В следующем примере в столбец ProductDescription мы добавим дополнительный текст (просто цифру 3), а значение Price мы увеличим в полтора раза. Все это мы сделаем для строки с Category = 2.

Скриншот 5

Пример обновления данных таблицы на основе данных другой таблицы

Достаточно часто требуется обновить данные одной таблицы на основе данных другой, например, просто скопировать данные. Это можно сделать за счет объединения нужных таблиц в инструкции UPDATE. При этом существует несколько способов объединения, я покажу два.

Для примера здесь мы скопируем название категорий из таблицы Categories, и вставим их в столбец ProductDescription таблицы Goods, объединять будем по идентификатору категории.

Скриншот 6

Пример обновления данных с использованием подзапроса

В этом примере я покажу, как можно использовать подзапрос в инструкции UPDATE. Для примера мы подсчитаем количество товаров в каждой категории и присвоим полученное значение столбцу ProductDescription.

Для того чтобы узнать количество товаров, мы будем использовать встроенную функцию COUNT, а для преобразования числа в строку — функцию CAST. Фильтровать строки в подзапросе мы будем по идентификатору категории, значение для сравнения будем получать из основного запроса.

Скриншот 7

Как видите, все отработало так, как мы задумали.

Видео-инструкция по обновлению данных в Microsoft SQL Server

У меня на этом все, надеюсь, материал был Вам полезен, пока!

Источник

Как обновить несколько сводных таблиц в Excel файле

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

Кнопка “Обновить все” на панели инструментов

Кнопка “Обновить все” – самый простой способ обновить все сводные таблицы в файле одновременно. Она находится на панели инструментов в разделе “Данные”:

Как обновить несколько сводных таблиц в Excel файле

Все что требуется сделать, это перейти во вкладку “Данные” => раздел “Запросы и подключения” = > “Обновить все”.

Автоматическое обновление всех сводных таблиц при открытии файла

Если вы хотите, чтобы все сводные таблицы обновлялись автоматически при открытии файла, то выполните следующие настройки:

  • Кликните правой кнопкой мыши на любой сводной таблице файла
  • В выпадающем меню выберите пункт “Параметры сводной таблицы”:

Как обновить несколько сводных таблиц в Excel файле

  • В появившемся диалоговом окне “Параметры сводной таблицы” перейдите на вкладку “Данные” и отметьте галочкой пункт “Обновить при открытии файла”:

Как обновить несколько сводных таблиц в Excel файле

  • Нажмите “ОК”
  • После этого Excel сообщит вам в диалоговом окне о том, что примененные настройки будут распространены на параметры других отчетов сводных таблиц, основанных на этих же исходных данных. Другими словами, если ваши сводные таблицы построены на одном и том же массиве исходных данных, то такую настройку не нужно осуществлять на других сводных таблицах вашего файла.

Как обновить несколько сводных таблиц в Excel файле

Овладеть всеми навыками работы со сводными таблицами вы можете на моем курсе “Сводные таблицы в Excel“!

Еще больше полезных приемов в работе со списками данных и функциями в Excel вы узнаете в практическом курсе “От новичка до мастера Excel“. Успей зарегистрироваться по ссылке!

Источник

UPDATE с условием из другой таблицы

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Update поля таблицы из другой таблицы
Здравствуйте уважаемыйе форумчане! Есть следующая задача: Существуют 2 таблицы «Клиенты» и.

Читайте также:  От чего зависит температуры воды

Update из другой таблицы
может что не так пишу. UPDATE Table d SET d.Field = t.Field FROM tmpTable t пишет ошибку.

Выборка с условием из другой таблицы
Здравствуйте! Есть две таблицы — person и ident person содержит данные анкеты ident содержит.

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

DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0104N Обнаружен неправильный элемент «4» после текста «T1 set T1.field1
=». Список возможных правильных элементов: «(«. SQLSTATE=42601

SQL0104N Обнаружен неправильный элемент «4» после текста «T1 set T1.field1 =». Список возможных правильных элементов: «( «.

Синтаксическая ошибка в операторе SQL или во входной строке команды для
процедуры SYSPROC.ADMIN_CMD, где указанный элемент следует после текста
» «. В поле » » показаны 20 символов оператора SQL или
входной строки команды для процедуры SYSPROC.ADMIN_CMD непосредственно
перед неверным элементом.

В качестве подсказки поле SQLERRM области SQLCA содержит частичный
список правильных элементов в виде » «. При составлении
этого списка подразумевается, что предыдущая часть оператора не содержит
ошибок.

Это сообщение может появиться, когда текст передан в процессор командной
строки (CLP) в командном режиме, и этот текст содержит специальные
символы, которые интерпретируются оболочкой операционной системы, такие
как одиночные и двойные кавычки без эскейп-символа.

Оператор невозможно обработать.

Ваши возможные действия для устранения этой ошибки:

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

Добавлено через 2 минуты
Если что: поменял в тексте ошибки названия таблиц и полей на те, которые указал в вопросе.

Сообщение от amicus_ratio
Сообщение от amicus_ratio
Сообщение от cygapb-007

UPDATE (SELECT T1.field1 FROM T1 INNER JOIN T2 ON T1.ID = T2.ID AND T2.field2 = 12) T1 SET T1.field1 = 4 WHERE T1.field1 = 2
DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0150N Полная выборка, производная таблица, типизированная таблица,
материализованная таблица запросов, таблица с кластеризацией по диапазонам или
промежуточная таблица назначения в операторе INSERT, DELETE, UPDATE, MERGE или
TRUNCATE — это объект назначения, для которого запрошенная операция не
разрешена. SQLSTATE=42807

SQL0150N Полная выборка, производная таблица, типизированная таблица, материализованная таблица запросов, таблица с кластеризацией по диапазонам или промежуточная таблица назначения в операторе INSERT, DELETE, UPDATE, MERGE или TRUNCATE — это объект назначения, для которого запрошенная операция не разрешена.

Полная выборка, производная таблица, типизированная таблица,
материализованная таблица запросов, таблица с кластеризацией по
диапазонам или промежуточная таблица в операторе INSERT, DELETE, UPDATE,
MERGE или TRUNCATE определены так, что запрошенную операцию вставки,
изменения, удаления или усечения выполнить нельзя.

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

* Ключевое слово DISTINCT
* функцию столбца в списке выбора
* Условие GROUP BY или HAVING
* Условие FROM, где задается одно из следующего:
* Более одной таблицы или производной таблицы
* Производная таблица только для чтения (столбцу READONLY
SYSCAT.VIEWS присвоено значение ‘Y’)

* оператор действия над множествами (кроме оператора UNION ALL).
* Пользователи системы объединения: ограничения этого источника данных
могли привести к тому, что для данной производной таблицы невозможна
модификация

Обратите внимание на то, что эти условия не применяются к подзапросам
оператора SELECT или полной выборки.

Производную таблицу, которая прямо или косвенно содержит условие WHERE
для подзапроса или подпрограмму, определенную с NOT DETERMISTIC или
EXTERNAL ACTION, нельзя использовать в качестве объекта назначения для
оператора MERGE.

Производную таблицу, определенную с условием WITH ROW MOVEMENT, нельзя
использовать как объект назначения оператора MERGE, который включает в
себя операцию изменения.

Читайте также:  Малые тела солнечной системы кратко таблица

Нельзя вставлять строки прямо в типизированную таблицу, определенную на
структурном типе, если он не конкретизуем. В подтаблицы такой таблицы
вставки разрешены.

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

Таблицу с кластеризацией по диапазонам нельзя использовать в операции
усечения.

Оператор невозможно обработать.

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

Пользователи системы объединения: если причина ошибки неизвестна,
попробуйте определить, какой из источников данных виновен в
возникновении ошибки (процедуру определения этого источника смотрите в
руководстве по устранению неисправностей) и проверьте определение
объекта и ограничения модификации для этого источника данных.

Добавлено через 13 минут
На первый предложенный вами вариант выдавал:

UPDATE T1 INNER JOIN T2 ON T1.ID = T2.ID SET T1.field = 4 WHERE (T1.field1 = 2) AND (T2.field2 = 12)
DB21034E Данная команда обрабатывалась как оператор SQL, поскольку она не
является допустимой командой процессора командной строки. При обработке SQL
было получено сообщение:
SQL0104N Обнаружен неправильный элемент «JOIN» после текста «». Список
возможных правильных элементов: «FROM». SQLSTATE=42601

SQL0104N Обнаружен неправильный элемент «JOIN» после текста «». Список возможных правильных элементов: «FROM «.

Синтаксическая ошибка в операторе SQL или во входной строке команды для
процедуры SYSPROC.ADMIN_CMD, где указанный элемент следует после текста
» «. В поле » » показаны 20 символов оператора SQL или
входной строки команды для процедуры SYSPROC.ADMIN_CMD непосредственно
перед неверным элементом.

В качестве подсказки поле SQLERRM области SQLCA содержит частичный
список правильных элементов в виде » «. При составлении
этого списка подразумевается, что предыдущая часть оператора не содержит
ошибок.

Это сообщение может появиться, когда текст передан в процессор командной
строки (CLP) в командном режиме, и этот текст содержит специальные
символы, которые интерпретируются оболочкой операционной системы, такие
как одиночные и двойные кавычки без эскейп-символа.

Оператор невозможно обработать.

Ваши возможные действия для устранения этой ошибки:

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

Источник

Оператор UPDATE стр. 1

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

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

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

Ссылка на «выражение для вычисления значения столбца» может относиться к текущим значениям в изменяемой таблице. Например, мы можем уменьшить все цены портативных компьютеров на 10 процентов с помощью следующего оператора:

Разрешается также значения одних столбцов присваивать другим столбцам. Пусть, например, требуется заменить жесткие диски менее 10 Гбайт в портативных компьютерах. При этом емкость новых дисков должна составлять половину объема RAM, имеющейся в данных устройствах. Эту задачу можно решить следующим образом:

Естественно, типы данных столбцов hd и ram должны быть совместимы. Для приведения типов может использоваться выражение CAST (пункт 5.9).

Если требуется изменять данные в зависимости от содержимого некоторого столбца, можно воспользоваться выражением CASE (пункт 5.9) Если, скажем, нужно поставить жесткие диски объемом 20 Гбайт на портативные компьютеры с памятью менее 128 Мбайт и 40 гигабайтные — на остальные портативные компьютеры, то можно написать такой запрос:

Для вычисления значений столбцов допускается также использование подзапросов. Например, требуется укомплектовать все портативные компьютеры самыми быстрыми процессорами из имеющихся в наличии. Тогда можно написать:

Необходимо сказать несколько слов об автоинкрементируемых столбцах. Если столбец code в таблице Laptop определен как IDENTITY(1,1), то следующий оператор

Разумеется, другой строки со значением code = 5 в таблице быть не должно.

Источник