Update ms sql: MS SQL Server и T-SQL

Как правильно обновлять SQL Server

Самородов Федор Анатольевич: Как правильно обновлять SQL Server

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

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

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

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

  • http://TechNet.Microsoft.com/ru-ru/SQLServer/ff803383.aspx

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

Запомните эти цифры — только по ним мы сможем определить какие обновления у нас уже установлены, а какие — нет.

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

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

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

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

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

 

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

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

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

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

 

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

Теперь, сразу после установки SP1 устанавливаем CU4 и снова проверяем номер @@Version. Теперь этот номер совпадает с заявленным в описании CU4:

Всё. SQL-сервер успешно обновлён. Теперь мы можем ответить на вопрос из первого абзаца: «Да, у нас установлены все обновления для SQL-сервера.»

Подробнее об этом Вы сможете узнать на курсах SQL Server

Запросы SQL для обновления данных (UPDATE)

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

В SQL, изменить запись в таблице БД можно с помощью команды UPDATE. В самом минимальном виде команда обновления данных выглядит следующим образом:

UPDATE таблица SET поле = значение

Здесь, UPDATE – команда указывающая, что запрос на обновление данных;

таблица – название таблицы, в которой будет проводиться изменения;

SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;

поле – поле таблицы, в которое будет внесено изменение;

значение – новое значение, которое будет внесено в поле.

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

UPDATE goods SET price = 0

В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.

Изменение одного значения

Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.

Имеется таблица:

num
(номер товара)
title
(название)
price
(цена)
1 Чайник 300
2 Чашка 100
3 Ложка 25
4 Тарелка 100

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

UPDATE goods SET price = 150 WHERE num = 2

Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.

Внесение изменений в несколько строк с условием отбора

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

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

UPDATE goods SET price = price / 2 WHERE price >= 100

Условие WHERE здесь содержит правило, по которому будут выбраны только товары с ценой равной или более 100, а те товары, цена у которых ниже 100, затронуты запросом не будут.

price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

В результате выполнения такого запроса получим таблицу с измененными записями:

num
(номер товара)
title
(название)
price
(цена)
1 Чайник 150
2 Чашка 50
3 Ложка 25
4 Тарелка 50

Обновление значений в нескольких полях строки

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

UPDATE goods SET title = "утюг", price = 300 WHERE num = 2

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

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

Последние обновления для SQL Server — SQL Server

Обратная связь Редактировать

Твиттер LinkedIn Фейсбук Эл. адрес

  • Статья
  • 2 минуты на чтение

Применимо к: SQL Server (все поддерживаемые версии)

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

Дополнительные сведения о поддерживаемых продуктах см. на странице жизненного цикла продуктов Microsoft.

Последние обновления

Каждая из следующих ссылок содержит информацию обо всех применимых продуктах и ​​технологиях.

Ссылка
Версии продукта Последний пакет обновления Последняя ГДР Последнее накопительное обновление Дата выпуска CU Общее руководство
SQL Server 2019 Н/Д КБ 5014356 ТС 18
(КБ 5017593)
28.09.2022 Установка SQL Server 2019
SQL Server 2017 Н/Д КБ 5014354 ТС 31
(КБ 5016884)
20.09.2022 Установка SQL Server 2017
SQL Server 2016 Пакет Azure Connect (KB 5014242) КБ 5015371 Н/Д Н/Д — Управляемый экземпляр Azure SQL
SQL Server 2016 SP3 (КБ 5003279) КБ 5014355 Н/Д Н/Д Установка SQL Server 2016
SQL Server 2016 SP2 (КБ 4052908) КБ 5014365 ТС 17 + ГДР
(КБ 5014351)
14. 06.2022 Установка SQL Server 2016
SQL Server 2016 SP1 (КБ 3182545) КБ 4505219 ТС 15 + ГДР
(КБ 4505221)
09.07.2019 Установка SQL Server 2016
SQL Server 2016 Н/Д КБ4058560 ТС 9 (КБ 4058559) 22.11.2017 Установка SQL Server 2016
SQL Server 2014 SP3 (КБ 4022619) КБ 5014165 ТС 4 + ГДР
(КБ 5014164)
14.06.2022 Установка SQL Server 2014
SQL Server 2014 СП2 (КБ 3171021) КБ 4505217 ТС 18 (КБ 4500180) 29.07.2019 Установка SQL Server 2014
SQL Server 2014 SP1 (КБ 3058865) КБ 4032542 ТС 13 (КБ 4019099) 08.08.2017 Установка SQL Server 2014
SQL Server 2014 Н/Д МС 15-058 ТС 14 (КБ 3158271) 20. 06.2016 Установка SQL Server 2014
SQL Server 2012 СП4 (КБ 4018073) КБ 4583465 Н/Д Н/Д Установка SQL Server 2012
SQL Server 2012 SP3 (КБ 3072779) КБ 4057115 ТС 10 (КБ 4057121) 08.08.2017 Установка SQL Server 2012
SQL Server 2012 SP2 (КБ 2958429) МС 16-136 ТС 16 (КБ 3205054) 18.01.2017 Установка SQL Server 2012
SQL Server 2012 SP1 (КБ 2674319) МС 15-058 ТС 16 (КБ 3052476) 18.05.2015 Установка SQL Server 2012
SQL Server 2008 R2 SP3 (КБ 2979597) КБ 4057113 Н/Д Н/Д Установка SQL Server 2008 R2 с пакетом обновления 3 (SP3)
SQL Server 2008 R2 SP2 (КБ 2630458) МС 15-058 ТС 13 (КБ 2967540) 30.
06.2014
Установка SQL Server 2008 R2 с пакетом обновления 2 (SP2)
SQL Server 2008 SP4 (КБ 2979596) 4057114 Н/Д Н/Д SQL Server 2008 Обслуживание
SQL Server 2008 SP3 (КБ 2546951) МС 15-058 ТС 17 (КБ 2958696) 19.05.2014 SQL Server 2008 Обслуживание

Обновления обслуживания SQL Server 2019

Актуальную информацию об обновлениях обслуживания SQL Server см. на странице https://support.microsoft.com/help/4518398.

База знаний

  • KB 935897: добавочная модель обслуживания доступна от группы SQL Server для доставки исправлений для заявленных проблем
  • KB 824684: Описание стандартной терминологии, используемой для описания обновлений программного обеспечения Microsoft
  • КБ 822499: схема именования для пакетов обновления программного обеспечения Microsoft SQL Server
  • KB 321185: как определить версию и выпуск SQL Server и его компонентов

Дополнительные ресурсы

  • Документация по SQL Server
  • Информационный центр продуктов SQL Server
  • Блоги выпусков SQL Server
  • Как определить версию, выпуск и уровень обновления SQL Server и его компонентов

Обратная связь

Отправить и просмотреть отзыв для

Этот продукт Эта страница

Просмотреть все отзывы о странице

Использование UPDATE из SELECT в SQL Server — Управление базой данных — Блоги

В этой статье мы рассмотрим различные методы использования инструкции UPDATE from SELECT в SQL Server.

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

Здесь в игру вступает запрос UPDATE. Запрос UPDATE изменяет данные в существующей строке базы данных. Вы можете обновить все строки таблицы или ограничить затронутые строки для обновления, используя предложение WHERE. Обычно обновления SQL выполняются для существующей таблицы с прямой ссылкой. Например, в таблице [employee] требование должно увеличить зарплату всех активных сотрудников на 10%. В этом случае SQL-запрос прямой ссылки будет выглядеть так:

Обновить набор сотрудников [зарплата]= зарплата + (зарплата * 10 / 100) , где [активный]=1

Предположим, у вас есть другая таблица [Адрес], в которой хранятся местоположения сотрудников, и вам необходимо обновить таблицу [Сотрудник] на основе данных, доступных в таблице [Адрес]. Как вы обновляете данные в таблице [Сотрудник]?

К счастью, есть решение – UPDATE из инструкции SELECT. В следующем разделе мы рассмотрим различные способы выполнения обновлений с помощью инструкции SELECT. Например, таблица [Employee] имеет значения NULL для столбцов — [PostCode] и [City] на следующем снимке экрана. В таблице [Адрес] есть значения для обоих столбцов [Почтовый индекс] и [Город].

Метод 1: ОБНОВЛЕНИЕ из SELECT: Метод соединения

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

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

 ВЫБЕРИТЕ e.City,A.City, e.PostCode,A.PostCode
ОТ Сотрудника e
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
[Адрес] а
ON e.EmpID = A.EmpID 

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

  1. Замените ключевое слово select на update.
  2. Укажите имя таблицы или псевдоним, который необходимо обновить.
  3. Используйте заданное ключевое слово и символ равенства (=) между ссылочным и целевым столбцами.
 ОБНОВЛЕНИЕ e комплект
e.City=A.City,
e.PostCode=A.PostCode
ОТ Сотрудника e
ВНУТРЕННЕЕ СОЕДИНЕНИЕ [Адрес] a
ON e.EmpID = A.EmpID 

Затем выполните оператор UPDATE и убедитесь, что значения исходного и целевого столбца совпадают.

Метод 2: ОБНОВЛЕНИЕ из SELECT: Оператор MERGE

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

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

  • Используйте оператор MERGE для обновления данных в таблице [Employee].
  • Затем он ссылается на другую таблицу, когда применяется предложение USING.
  • Затем WHEN MATCHED указывает объединение JOIN (внутреннее соединение) между исходной и целевой таблицами.
  • Затем он обновляет [PostCode] и [City] из таблицы [Address] в таблицу [Employee] с помощью инструкции THEN UPDATE, за которой следует сопоставление исходного и целевого столбцов.
  • Оператор MERGE всегда заканчивается точкой с запятой (;).
 MERGE Сотрудник AS e
ИСПОЛЬЗОВАНИЕ(ВЫБРАТЬ * ИЗ [Адрес]) КАК
ON A.EmpID=e.EmpID
КОГДА СООТВЕТСТВУЕТ, ТОГДА ОБНОВЛЯЕТ НАБОР
e.PostCode=A.PostCode ,
е.Город = А.Город; 

Метод 3: ОБНОВЛЕНИЕ из SELECT: Метод подзапроса

Подзапрос определяет внутренний запрос, который можно использовать внутри операторов SELECT, INSERT, UPDATE и DELETE. Это простой способ обновления существующих данных таблицы из других таблиц.

 ОБНОВЛЕНИЕ Сотрудник
SET Employee.City=(ВЫБЕРИТЕ [Адрес].город
ОТ [Адрес]
ГДЕ [Адрес].EmpID = Сотрудник.EmpId) 
  • Приведенный выше запрос использует оператор SELECT в предложении SET оператора UPDATE.
  • Если подзапрос находит соответствующую строку, запрос на обновление обновляет записи для конкретного сотрудника.
  • Если подзапрос возвращает NULL (нет соответствующей строки), он обновляет NULL для соответствующего столбца.
  • Если подзапрос возвращает более одной совпадающей строки, инструкция UPDATE вызывает ошибку — «Подзапрос SQL Server вернул более 1 значения. Это не разрешено, если в подзапросе используются операторы сравнения (=, !=, <, <= , >, >=)».

Ограничения подзапроса

  • Подзапрос с оператором сравнения может включать только одно имя столбца, за исключением случаев, когда он используется для оператора IN или EXISTS. Поэтому, если нам требуется обновить несколько столбцов данных, нам нужны отдельные операторы SQL.
  • Вы не можете использовать типы данных ntext , text и image  в подзапросе.
  • Подзапрос не может включать предложение GROUP BY и HAVING, если подзапрос содержит немодифицированный оператор сравнения. Немодифицированный оператор сравнения не может использовать ключевое слово ANY или ALL.

Сравнение производительности между различными операторами UPDATE из SELECT

В этом разделе мы проведем сравнение производительности между различными методами UPDATE из SELECT. Для этого мы начнем с совместного выполнения SQL-запросов, включив фактический план выполнения (Ctrl + M) в SQL Server Management Studio, и разделим их с помощью оператора Go.

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

  • Метод соединения имеет стоимость запроса 41% (относительно всей партии)
  • Оператор MERGE имеет стоимость запроса 34% (относительно общего пакета)
  • Метод подзапроса имеет стоимость запроса 24% (относительно общего пакета)

Метод JOIN использует 40% стоимости для отдельной сортировки и 35% стоимости для обновления кластеризованного индекса.

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

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

Для получения более подробной информации вы можете обратиться к моим предыдущим статьям: План выполнения SQL Server — что это такое и как он помогает при проблемах с производительностью? и Как читать и анализировать планы выполнения SQL Server.

Сводка

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

Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *