sql update что это

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

Заметка!

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что это

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

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

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

Источник

Оператор SQL UPDATE предназначен для обновления (редактирования) данных в таблице. Он применяется, когда в той или иной строке таблицы уже записаны некоторые данные и нужно внести в них изменения. Оператор UPDATE имеет следующий синтаксис:

Квадратные скобки [], в которые заключена часть запроса WHERE УСЛОВИЕ, означает, что эта часть является необязательной.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке .

Использование оператора SQL UPDATE вместе с секцией WHERE

Хотя часть запроса на обновление данных WHERE УСЛОВИЕ является необязательной, в большинстве случаев она применяется, так как обновить чаще требуется значения столбцов в определённых строках.

IdCategoryPartUnitsMoney
1ТранспортАвтомашины11017600
2НедвижимостьКвартиры8918690
3НедвижимостьДачи5711970
4ТранспортМотоциклы13120960
5СтройматериалыДоски687140
6ЭлектротехникаТелевизоры1278255
7ЭлектротехникаХолодильники1378905
8СтройматериалыРегипс11211760
9ДосугКниги966240
10НедвижимостьДома479870
11ДосугМузыка1177605
12ДосугИгры412665

После выполнения этого запроса соответствующая строка будет содержать следующие данные:

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

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

Использование оператора SQL UPDATE и вычисляемые значения

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

Использование оператора SQL UPDATE без секции WHERE

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

Примеры запросов к базе данных «Портал объявлений-1» есть также в уроках об операторах INSERT, DELETE, HAVING и UNION.

Источник

UPDATE (Transact-SQL)

Изменяет существующие данные в таблице или представлении в SQL Server. Примеры см. в разделе Примеры.

sql update что это. Смотреть фото sql update что это. Смотреть картинку sql update что это. Картинка про sql update что это. Фото sql update что этоСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

WITH
Задает временный именованный результирующий набор или представление, которые называются обобщенным табличным выражением (CTE), определяемым в пределах области действия инструкции UPDATE. Результирующий набор CTE, на который ссылается инструкция UPDATE, является производным простого запроса.

Обобщенные табличные выражения могут также использоваться с инструкциями SELECT, INSERT, DELETE и CREATE VIEW. Дополнительные сведения см. в разделе WITH common_table_expression (Transact-SQL).

TOP ( expression ) [ PERCENT ]
Задает число или процент обновляемых строк. expression может быть либо числом, либо процентом от числа строк.

Строки, на которые ссылается выражение TOP, используемое с инструкциями INSERT, UPDATE и DELETE, не упорядочиваются.

Инструкции INSERT, UPDATE и DELETE требуют заключения expression в круглые скобки в TOP. Дополнительные сведения см. в разделе TOP (Transact-SQL).

table_alias
Псевдоним, заданный в предложении FROM и представляющий таблицу или представление, строки которых будут обновлены.

server_name
Имя сервера (с использованием имени связанного сервера или функции OPENDATASOURCE в качестве имени сервера), на котором расположена таблица или представление. Если указано server_name, необходимо указать database_name и schema_name.

database_name
Имя базы данных.

schema_name
Имя схемы, которой принадлежит таблица или представление.

table_or_view_name
Имя таблицы или представления, из которых должны обновляться строки. Представление, на которое ссылается аргумент table_or_view_name, должно быть обновляемым и ссылаться только на одну базовую таблицу в предложении FROM в представлении. Дополнительные сведения об обновляемых представлениях см. в разделе CREATE VIEW (Transact-SQL).

rowset_function_limited
Функция OPENQUERY или OPENROWSET, в зависимости от возможностей поставщика.

WITH ( )
Задает одно или несколько табличных указаний, разрешенных для целевой таблицы. Ключевое слово WITH и круглые скобки обязательны. Использование NOLOCK, READUNCOMMITTED и NOEXPAND запрещено. Сведения о табличных указаниях см. в разделе Табличные указания (Transact-SQL).

@table_variable
Задает переменную table в качестве источника таблицы.

SET
Задает список обновляемых имен столбцов или переменных.

column_name
Столбец, содержащий изменяемые данные. Аргумент column_name должен существовать в table_or view_name. Столбцы идентификаторов не могут быть обновлены.

expression
Переменная, литеральное значение, выражение или инструкция подзапроса выборки (заключенная в скобки), которые возвращают единственное значение. Значение, возвращаемое expression, заменяет существующее значение в column_name или @variable.

При ссылке на типы данных символов Юникода nchar, nvarchar и ntext выражение ‘expression’ должно начинаться с заглавной буквы ‘N’. Если префикс «N» не указан, SQL Server выполнит преобразование строки в кодовую страницу, соответствующую параметрам сортировки базы данных или столбца, действующим по умолчанию. Любые символы, не входящие в эту кодовую страницу, будут утрачены.

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

< += | -= | *= | /= | %= | &= | ^= | |= >
Составной оператор присваивания:
+= Сложение и присваивание
–= Вычитание и присваивание
*= Умножение и присваивание
/= Деление и присваивание
%= Остаток от деления и присваивание
&= Выполнение побитовой операции AND и присваивание
^= Выполнение побитовой операции XOR и присваивание
|= Выполнение побитовой операции OR и присваивание

udt_column_name
Столбец определяемого пользователем типа.

property_name | field_name
Общедоступное свойство или общедоступный элемент данных определяемого пользоватлем типа.

expression является значением, которое копируется в column_name. Аргумент expression должен преобразовываться или поддерживать неявное преобразование к типу column_name. Если для expression установлено значение NULL, @Length не учитывается, а значение в column_name усекается с позиции, на которую указывает аргумент @Offset.

Аргумент @Offset — это начальная точка в значении, хранимом в column_name, начиная с которой записывается expression.Аргумент @Offset задает последовательную позицию разряда, начиная с 0, имеет тип bigint и не может быть отрицательным. Если аргумент @Offset имеет значение NULL, операция обновления добавляет значение expression в конце существующего значения аргумента column_name, а аргумент @Length пропускается. Если значение аргумента @Offset больше, чем байтовая длина значения аргумента column_name, компонент Компонент Database Engine возвращает ошибку. Если сумма значений @Offset и @Length превышает длину базового значения столбца, удаление выполняется до последнего символа этого значения.

Аргумент @Length задает длину части значения столбца начиная с @Offset, которая заменяется на выражение expression.Аргумент @Length имеет тип bigint и не может быть отрицательным. Если аргумент @Length имеет значение NULL, операция обновления удаляет все данные, начиная со значения @Offset до конца значения column_name.

Дополнительные сведения см. ниже в разделе Обновление типов данных большого объема.

@ variable
Объявленная переменная, которой присваивается значение, возвращенное expression.

Предложение SET @ variable = column = expression присваивает переменной то же значение, что и столбцу. Это отличается от предложения SET @ variable = column, column = expression, присваивающего переменной значение столбца до обновления.

Возвращает обновленные данные или основанные на них выражения в рамках выполнения операции UPDATE. Предложение OUTPUT не поддерживается ни в одной инструкции DML, целью которой являются удаленные таблицы или представления. Дополнительные сведения об аргументах и поведении этого предложения см. в статье Предложение OUTPUT (Transact-SQL).

FROM Определяет, что для определения критериев операции обновления используется таблица, представление или производная таблица. Дополнительные сведения см. в разделе FROM (Transact-SQL).

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

Представление с триггером INSTEAD OF UPDATE не может быть целью инструкции UPDATE с предложением FROM.

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

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

В поисковых обновлениях задается условие поиска строк, предназначенных к удалению.

В позиционных обновлениях используется предложение CURRENT OF для указания курсора. Операция обновления выполняется в текущем положении курсора.

Задает условие, которому должны удовлетворять обновляемые строки. Условие поиска может также представлять собой условие, на котором основано соединение. Количество предикатов, которое может содержать условие поиска, не ограничено. Дополнительные сведения об условиях поиска и предикатах см. в статье Условие поиска (Transact-SQL).

CURRENT OF
Определяет, что обновление выполняется в текущей позиции указанного курсора.

GLOBAL
Указывает, что аргумент cursor_name ссылается на глобальный курсор.

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

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

Рекомендации

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

Проявляйте осторожность, указывая предложение FROM при задании критериев для операции обновления. Результаты инструкции UPDATE не определены, если инструкция включает предложение FROM, в котором для каждого вхождения обновляемого столбца не задано единственное значение, то есть если инструкция UPDATE не является детерминированной. Например, в инструкции UPDATE следующего скрипта обе строки в Table1 удовлетворяют условиям предложения FROM в инструкции UPDATE, но не определено, какая строка из Table1 используется для обновления строки в Table2.

Поддержка совместимости

Поддержка использования подсказок READUNCOMMITTED и NOLOCK в предложении FROM, применяемом к целевой таблице инструкции UPDATE или DELETE, будет удалена в следующей версии SQL Server. Следует избегать использования этих указаний в таком контексте в новой разработке и запланировать изменение приложений, использующих их в настоящий момент.

Типы данных

Все столбцы, имеющие тип данных char и nchar, дополняются справа до заданной длины.

Если параметр ANSI_PADDING имеет значение OFF, все конечные пробелы удаляются из данных, вставленных в столбцы varchar и nchar, за исключением строк, содержащих только пробелы. Эти строки усекаются до пустых строк. Если ANSI_PADDING имеет значение ON, вставляются конечные пробелы. Драйвер ODBC для Microsoft SQL Server и поставщик OLE DB для SQL Server автоматически устанавливают ANSI_PADDING ON для каждого соединения. Этот параметр можно настроить в источниках данных ODBC или устанавливая атрибуты или свойства соединений. Дополнительные сведения см. в разделе SET ANSI_PADDING (Transact-SQL).

Обновление столбцов типа text, ntext и image

Изменение столбцов типа text, ntext или image с помощью инструкции UPDATE инициализирует столбец, присваивает ему допустимый текстовый указатель и выделяет по крайней мере одну страницу данных, если столбец не обновляется значением NULL.

Чтобы заменить или изменить большие блоки данных типа text, ntext или image, вместо UPDATE используется инструкция WRITETEXT или UPDATETEXT.

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

Обновление типов данных большого объема

Например, частичное обновление столбца с типом varchar(max) может удалить или изменить только первые 200 байтов в столбце (200 символов при использовании символов ASCII), тогда как полное обновление удалит или изменит все данные в столбце. Обновления .WRITE, вставляющие или добавляющие новые данные, имеют минимальное протоколирование, если установлена простая модель восстановления базы данных или модель восстановления с неполным протоколированием. Если обновляются существующие значения, ведение журнала не сокращается до минимума. Дополнительные сведения см. в статье Журнал транзакций (SQL Server).

Компонент Компонент Database Engine преобразует частичное обновление в полное, если инструкция UPDATE приводит к одному из следующих действий.

Нельзя использовать предложение .WRITE для обновления столбца NULL или присваивания аргументу column_name значения NULL.

Параметры @Offset и @Length указываются в байтах для типов данных varbinary и varchar и в байтовых парах для типа данных nvarchar. Дополнительные сведения о длине строковых типов данных см. в разделах char и varchar (Transact-SQL) и nchar и nvarchar (Transact-SQL).

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

Если на столбец, измененный предложением .WRITE, ссылается предложение OUTPUT, полное значение столбца либо исходный образ в deleted. column_name или преобразованный образ в inserted. column_name возвращается определенному столбцу в табличной переменной. См. пример Т ниже.

Чтобы добиться функциональности предложения .WRITE при обработке других символьных или двоичных типов данных, используется STUFF (Transact-SQL).

Обновление столбцов определяемого пользователем типа

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

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

SQL Server возвращает ошибку, если метод мутатора возвращает значение NULL языка Transact-SQL либо если новое значение, порожденное методом мутатора, соответствует значению NULL.

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

Обновление данных FILESTREAM

Обработка ошибок

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

Если инструкция UPDATE при оценке выражения встречает арифметическую ошибку (переполнение, деление на ноль или ошибку домена), обновление не выполняется. Остальная часть пакета не выполняется и возвращается сообщение об ошибке.

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

Совместимость

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

ограничения

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

Инструкция UPDATE с неправильно подобранными ссылками на обобщенное табличное выражение.

Режим блокировки

Инструкция UPDATE получает монопольную блокировку (X) на строки, которые она изменяет, и держит блокировку до тех пор, пока транзакция не завершится. В зависимости от плана запроса для инструкции UPDATE, количества изменяемых строк и уровня изоляции транзакции, блокировки могут быть получены на уровне страницы или на уровне таблицы, а не на уровне строк. Чтобы избежать этих блокировок более высокого уровня, можно разделить инструкцию UPDATE, которая распространяется на тысячи или более строк, на пакеты и убедиться, что все условия объединения и фильтрации поддерживаются индексами. Дополнительные сведения о блокировке механизмов в SQL Server см. в статье Блокировка в ядре СУБД.

Режим ведения журнала

Инструкция UPDATE записывается в журнал, однако частичные обновления типов данных с большими значениями с использованием предложения .WRITE регистрируются на минимальном уровне. Дополнительные сведения см. ниже в подразделе «Обновление типов данных большого объема» приведенного ранее раздела «Типы данных».

Безопасность

Разрешения

Разрешения UPDATE необходимы для целевой таблицы. Кроме того, требуются разрешения на выполнение SELECT для обновляемой таблицы, если инструкция UPDATE содержит предложение WHERE или если аргумент expression в предложении SET использует столбец в этой таблице.

Примеры

КатегорияИспользуемые элементы синтаксиса
Базовый синтаксисUPDATE
Ограничение обновляемых строкWHERE • TOP • WITH обобщенное табличное выражение • WHERE CURRENT OF
Установка значений столбцавычисляемые значения • составные операторы • значения по умолчанию • вложенные запросы
Указание целевых объектов, отличных от стандартных таблицпредставления • табличные переменные • псевдонимы таблицы
Обновление данных на основе данных из других таблицFROM
Обновление строк в удаленной таблицесвязанный сервер • OPENQUERY • OPENDATASOURCE
Обновление типов данных больших объектов.WRITE • OPENROWSET
Обновление определяемых пользователем типов данныхопределяемые пользователем типы
Переопределение поведения по умолчанию для оптимизатора запросов с помощью указанийтабличные подсказки • подсказки в запросах
Сбор результатов выполнения инструкции UPDATEOUTPUT, предложение
Использование инструкции UPDATE в других инструкцияхХранимые процедуры • TRY. CATCH

Основной синтаксис

В примерах в этом разделе описывается базовая функциональность инструкции UPDATE с помощью минимального необходимого синтаксиса.

A. Использование простой инструкции UPDATE

Б. Обновление нескольких столбцов

Ограничение обновляемых строк

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

В. Применение предложения WHERE

Г. Использование предложения TOP

В следующем примере предложение TOP используется для ограничения числа строк, изменяемых в процессе выполнения инструкции UPDATE. Если в инструкции UPDATE указано предложение TOP (n), то операция обновления выполняется для произвольного подмножества в n строк. В следующем примере в столбце VacationHours для случайных 10 строк таблицы Employee значение меняется на 25 %.

Если нужно применить изменения с предложением TOP в определенной последовательности, укажите во вложенной инструкции выборки инструкцию ORDER BY. В следующем примере изменяется длительность отпуска для 10 сотрудников, имеющих наибольший стаж работы.

Д. Использование предложения WITH обобщенное_табличное_выражение

Е. Использование предложения WHERE CURRENT OF

Установка значений столбца

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

Ж. Указание вычисляемого значения

З. Задание составного оператора

В следующем примере демонстрируется использование переменной @NewPrice для увеличения цены красных велосипедов прибавлением 10 к текущей цене.

И. Задание вложенного запроса в предложении SET

К. Обновление строк с использованием значений DEFAULT

Указание целевых объектов, отличных от стандартных таблиц

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

Л. Указание представления в качестве целевого объекта

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

М. Задание псевдонима таблицы в качестве целевого объекта

Н. Задание табличной переменной в качестве целевого объекта

В следующем примере производится обновление строк в табличной переменной.

Обновление данных на основе данных из других таблиц

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

О. Использование инструкции UPDATE с данными из другой таблицы

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

Обновление строк в удаленной таблице

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

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

Т. Обновление данных в удаленной таблице с помощью функции OPENQUERY

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

У. Обновление данных в удаленной таблице с помощью функции OPENDATASOURCE

В следующем примере выполняется обновление строки в удаленной таблице с помощью вызова функции OPENDATASOURCE, возвращающей набор строк. Определите допустимое имя сервера для источника данных, используя формат server_name или server_name\instance_name. Возможно, потребуется настроить у экземпляра SQL Server параметр Ad Hoc Distributed Queries. Дополнительные сведения см. в статье Параметр конфигурации сервера «ad hoc distributed queries».

Обновление типов данных больших объектов

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

T. Использование инструкции UPDATE с функцией OPENROWSET для изменения столбца типа varbinary(max)

Ф. Использование UPDATE для изменения данных FILESTREAM

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

В следующих примерах изменяются значения в столбцах определяемых пользователем типов данных CLR. Описываются три метода. Дополнительные сведения об определяемых пользователем столбцах см. в разделе Определяемые пользователем типы данных CLR.

V. Использование системных типов данных

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

Ц. Вызов метода

X. Изменение значения свойства или элемента данных

Переопределение поведения по умолчанию для оптимизатора запросов с помощью указаний

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

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

Ш. Задание табличной подсказки

В следующем примере задается табличное указание TABLOCK. Эта подсказка указывает, что на таблицу Production.Product накладывается совмещаемая блокировка, удерживаемая до завершения инструкции UPDATE.

Z. Задание подсказки в запросе

В следующем примере задается указание запроса OPTIMIZE FOR (@variable) в инструкции UPDATE. Эта подсказка указывает на необходимость использования оптимизатором запросов при компиляции и оптимизации запросов конкретного значения локальной переменной. Значение используется только в процессе оптимизации запроса, но не в процессе выполнения.

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

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

AA. Использование инструкции UPDATE с предложением OUTPUT

Использование инструкции UPDATE в других инструкциях

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

АБ. Использование UPDATE в хранимой процедуре

АВ. Использование UPDATE в блоке TRY. CATCH

В следующем примере инструкция UPDATE используется в блоке TRY. CATCH для обработки ошибок выполнения, которые могут возникнуть во время операции обновления.

Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)

АГ. Использование простой инструкции UPDATE

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

АД. Использование инструкции UPDATE с предложением WHERE

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

АЕ. Использование инструкции UPDATE с меткой

В следующем примере показано использование LABEL с инструкцией UPDATE.

АЖ. Использование инструкции UPDATE с данными из другой таблицы

В этом примере создается таблица для хранения итогов продаж по годам. Обновляются итоги продаж за 2004 год с помощью инструкции SELECT в таблице FactInternetSales.

АЗ. Соединение ANSI для инструкций обновления

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

Источник

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

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