C update sql: SQL update statement in C#

Содержание

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


Главная > О Центре > Советы

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

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

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

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

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

Но прежде чем идти туда, необходимо выяснить, какая версия установлена у нас прямо сейчас. Нам нужен точный номер, включающий в себя номер построения (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 используется для изменения значений в записях таблицы.

Оператор SQL UPDATE имеет следующий синтаксис:

UPDATE table_name SET expression [WHERE condition]

Напоминаю, что записи в квадратных скобках [] являются необязательными.

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

Дополнительное условие, описываемое в операторе SQL WHERE, помогает более гибко совершать манипуляции данными.


Примеры оператора SQL UPDATEИмеется следующая таблица Planets:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
1 Mars 3396 687 1659 No Christiaan Huygens
2 Saturn 60268 10759. 22 Yes
3 Neptune 24764 60190 1846 Yes John Couch Adams
4 Mercury 2439 115.88 1631 No Nicolaus Copernicus
5 Venus 6051 243 1610 No Galileo Galilei

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

UPDATE Planets
SET PlanetName = 'Pluton'
WHERE ID = 3

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

Выполним запрос оператором SQL SELECT, чтобы посмотреть изменения в записи:

SELECT *
FROM Planets
WHERE ID = 3

Результат:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
3 Pluton 24764 60190 1846 Yes John Couch Adams

Пример 2.  С помощью оператора SQL UPDATE у первых трех записей таблицы изменить значение наличия колец (HavingRings) на «No» и обнулить поле ID

Код примера для MS SQL Server:

UPDATE TOP(3) Planets
SET HavingRings = 'No', ID = NULL

Код примера для MySQL:

UPDATE Planets
SET HavingRings = 'No', ID = NULL
LIMIT 3

Выполним проверку:

SELECT TOP(3) *
FROM Planets

Результат:

ID PlanetName Radius SunSeason OpeningYear HavingRings Opener
NULL Mars 3396 687 1659 No Christiaan Huygens
NULL Saturn 60268 10759.22 No
NULL Neptune 24764 60190 1846 No John Couch Adams

Что такое CCUpdate.

exe?

РЕКОМЕНДУЕМ: Нажмите здесь, чтобы исправить ошибки Windows и оптимизировать производительность системы

Процесс, известный как средство аварийного обновления CCleaner или CCUpdate, принадлежит программному обеспечению Piriform Updater или Total Defense Internet Security Suite от Piriform Software или Piriform (www.piriform.com) или Total Defense.

Описание: CCUpdate.exe не является необходимым для ОС Windows и вызывает относительно немного проблем. Файл CCUpdate.exe находится в подпапках «C: \ Program Files» (обычно это C: \ Program Files \ CCleaner \ ). Известные размеры файлов в Windows 10/8/7 / XP составляют 619 416 байт (58% всех вхождений), 548 824 байт и еще 7 вариантов.

В программе есть видимое окно. Файл имеет цифровую подпись. Это не системный файл Windows. Приложение периодически запускается планировщиком задач Windows. CCUpdate.exe способен мониторить приложения. Поэтому технический рейтинг надежности 20% опасности .

Деинсталляция этого варианта: Вы можете сделать следующее:

  • поиск в зоне поддержки на сайте Piriform
  • удалить связанную программу (Пуск> Панель управления> Удалить программу> CCleaner или Piriform Ltd )

Внешняя информация от Пола Коллинза:

  • «Обновление Norton» определенно не требуется.

Важно: некоторые вредоносные программы маскируют себя как CCUpdate.exe, особенно если они находятся в папке C: \ Windows или C: \ Windows \ System32. Таким образом, вы должны проверить файл CCUpdate.exe на вашем ПК, чтобы убедиться, что это угроза. Мы рекомендуем Security Task Manager для проверки безопасности вашего компьютера. Это был один из лучших вариантов загрузки The Washington Post и PC World .

Аккуратный и опрятный компьютер — это главное требование для избежания проблем с CCUpdate. Это означает запуск сканирования на наличие вредоносных программ, очистку жесткого диска с использованием 1 cleanmgr и 2 sfc / scannow, 3 удаления ненужных программ, проверку наличия программ автозапуска (с использованием 4 msconfig) и включение автоматического обновления Windows 5. Всегда не забывайте выполнять периодическое резервное копирование или, по крайней мере, устанавливать точки восстановления.

Если вы столкнулись с реальной проблемой, попробуйте вспомнить последнее, что вы сделали, или последнее, что вы установили до того, как проблема появилась впервые. Используйте команду 6 resmon, чтобы определить процессы, которые вызывают вашу проблему. Даже для серьезных проблем, вместо переустановки Windows, лучше восстановить вашу установку или, для Windows 8 и более поздних версий, выполнить команду 7 DISM.exe / Online / Cleanup-image / Restorehealth. Это позволяет восстанавливать операционную систему без потери данных.

Чтобы помочь вам проанализировать процесс CCUpdate.exe на вашем компьютере, оказались полезными следующие программы: Менеджер задач безопасности отображает все запущенные задачи Windows, включая встроенные скрытые процессы, такие как мониторинг клавиатуры и браузера или записи автозапуска. Уникальный рейтинг риска безопасности указывает на вероятность того, что процесс является потенциальным шпионским ПО, вредоносным ПО или трояном. B Malwarebytes Anti-Malware обнаруживает и удаляет спящие шпионские, рекламные программы, трояны, клавиатурные шпионы, вредоносные программы и трекеры с вашего жесткого диска.

Связанный файл:

startupoptimizer.exe wisptis.exe rtop_svc.exe CCUpdate.exe bhoxml.dll nvstinit.dll fraps64.dat gdcagent.exe pgfnexsrv.exe vpnclient_x64.exe faservice.exe

Как мне обновить данные в SQL с помощью формы Windows C #, не затрагивая другие поля?

С этим две основные проблемы:
1) Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

При объединении строк возникают проблемы, потому что SQL принимает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood' 

Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и возникают проблемы. Но могло быть и хуже. Если я приду и напечатаю вместо этого: «x ‘; DROP TABLE MyTable; -», тогда SQL получит совсем другую команду:

ВЫБРАТЬ * ИЗ MyTable WHERE StreetAddress = 'x'; УДАЛИТЬ ТАБЛИЦУ MyTable; 

Какой SQL воспринимает как три отдельные команды:

ВЫБЕРИТЕ * ИЗ MyTable, ГДЕ StreetAddress = 'x'; 

Совершенно правильный SELECT

ОТКАЗАТЬ ТАБЛИЦУ MyTable; 

Совершенно допустимая команда «удалить таблицу»

 

А все остальное — комментарий.
Так оно и есть: выбирает любые совпадающие строки, удаляет таблицу из БД и игнорирует все остальное.]

Затем мы подходим к незначительным проблемам: почему вы устанавливаете имя пользователя, если вы уже знаете, что это то же самое значение? Потому что, если бы он был другим, он не соответствовал бы ни одной строке!

И напоследок: почему меняет поле имени? Потому что вы сказали это . ..
Если вы хотите, чтобы имя оставалось нетронутым, когда оно пусто, вам необходимо проверить свой код C # и либо использовать другой запрос, либо вместо этого передать текущее значение. Если вы скажете SQL «установить это на это», то это именно то, что он сделает…

SQL | Заявление UPDATE — GeeksforGeeks

SQL | Оператор UPDATE

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

Базовый синтаксис

  ОБНОВЛЕНИЕ имя_таблицы SET column1 = value1, column2 = value2, ...
ГДЕ условие;
  
table_name:  имя таблицы
  column1 : имя первого, второго, третьего столбца....
  значение1 : новое значение для первого, второго, третьего столбца ....
  условие : условие выбора строк, для которых
значения столбцов необходимо обновить.  

ПРИМЕЧАНИЕ: В приведенном выше запросе оператор SET используется для установки новых значений в конкретный столбец, а предложение WHERE используется для выбора строк, столбцы которых необходимо обновить. Если мы не использовали предложение WHERE, тогда будут обновлены столбцы в всех строках.Таким образом, предложение WHERE используется для выбора конкретных строк.

Примеры запросов

    • Обновление одного столбца : Обновите ИМЯ столбца и установите значение «PRATIK» во всех строках, где Возраст равен 20.
       UPDATE Student SET NAME = 'PRATIK' WHERE Age = 20;
       

      Вывод:
      Этот запрос обновит две строки (третья строка и пятая строка), и таблица Студент теперь будет выглядеть так:

      900XXXXXXX 900XX PRATIK
      ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст
      1 Оперативная память Дели XXXXXXXXXX 18
      2 18 GURGAON

      88 
      XXX 3 PRATIK ROHTAK XXXXXXXXXX 20
      4 SURESH Delhi XXXXXXXXXX 18
      18
      RATOHX
      2 RAMESH GURGAON XXXXXXX XXX 18

    • Обновление нескольких столбцов: Обновите ИМЯ столбца на «PRATIK» и АДРЕС на «SIKKIM», где ROLL_NO равно 1.
       ОБНОВЛЕНИЕ Студент НАБОР ИМЯ = 'PRATIK', АДРЕС = 'SIKKIM' ГДЕ ROLL_NO = 1;
       

      Выходные данные :
      Приведенный выше запрос обновит два столбца в первой строке, и таблица Студент теперь будет выглядеть так:

      PRATIK

      ROHTAK

      ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст
      1 PRATIK SIKKIM XXXXXXXXXX 18
      2 RAMESH GURGAON XXXX10XXX XXXX10XXX XXXX10XXX XXXX10XXX ROHTAK XXXXXXXXXX 20
      4 SURESH Delhi XXXXXXXXXX 18
      3 X Xxxx RAMESH GURGAON XXXXXXXXXX 18

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

  • Отсутствие предложения WHERE: Если мы опустим предложение WHERE в запросе на обновление, то все строки будут обновлены.
     ОБНОВЛЕНИЕ НАБОР студента ИМЯ = 'PRATIK';
     

    Вывод:
    Таблица Студент теперь будет выглядеть так:

    ROLL_NO ИМЯ АДРЕС ТЕЛЕФОН Возраст
    1 PRATIK Дели XXXXXXXXXX 18
    2 PRATIK GURGAON XXXXXXXXXX 18
    3 RATOHX5 RATOHX

    4 PRATIK Delhi XXXXXXXXXX 18
    3 PRATIK ROHTAK XXXXXXXXXX 20
    2 GATURGA

Это Статья предоставлена ​​ Harsh Agarwal . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью на сайте deposit.geeksforgeeks.org или отправить свою статью по электронной почте: [email protected] Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

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

Обзор обновления SQL Server Join

В этой статье рассматривается инструкция SQL Server Update Join в T-SQL для SQL Server.

Введение

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

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

Теперь возникает вопрос: можем ли мы обновить несколько таблиц с помощью SQL Server Update Join? Давайте рассмотрим эту статью.

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

Подготовить среду для демонстрации

Создайте таблицу Customers и вставьте в нее несколько записей:

СОЗДАТЬ ТАБЛИЦУ [dbo].[Клиенты]

([id] [INT] identity (1,1),

[CustomerName] [VARCHAR] (30) NULL,

[OrderCount] [INT] NULL

)

ON [PRIMARY] ;

GO

Вставить в клиентов ([CustomerName], [OrderCount]) значения ('Raj', NULL), ('Kusum', NULL), ('Akshita', NULL), ('John', NULL), ('Dan', NULL)

Создайте таблицу заказов и вставьте в нее несколько записей:

СОЗДАТЬ ТАБЛИЦУ [dbo]. [Заказы]

([Order_ID] [INT] IDENTITY (1, 1) NOT NULL,

[CustomerID] [INT] NOT NULL,

[OrderQuantity] [INT] NOT NULL,

[OrderAmount] [INT ] NOT NULL,

ОГРАНИЧЕНИЕ [PK_Orders] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРИРОВАН ([Order_ID] ASC)

)

ON [PRIMARY];

ГО

Эта таблица должна иметь ограничение внешнего ключа в столбце [CustomerID] таблицы Customers:

ИЗМЕНИТЬ ТАБЛИЦУ [dbo].[Заказы] С ПРОВЕРОМ ДОБАВИТЬ ОГРАНИЧЕНИЕ [FK_Orders_Customers] ИНОСТРАННЫЙ КЛЮЧ ([CustomerID])

ССЫЛКИ [dbo]. [Клиенты] ([Customerid])

GO

ALTER TABLE [dboK CONSTRAINT]. [Заказы] [FK_Orders_Customers]

GO

Вставить в [dbo]. [Заказы] (CustomerID, OrderQuantity, OrderAmount) значения (1,100,5000)

Вставить в [dbo]. [Заказы] (CustomerID, OrderQuantity, OrderAmount) значения ( 2,150,6879)

Вставить в [dbo]. [Заказы] (CustomerID, OrderQuantity, OrderAmount) значения (3,189,7895)

Оператор обновления SQL

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

Предположим, мы хотим обновить столбцы [OrderQuantity] и [OrderAmount] таблицы заказов, мы сначала используем оператор SELECT для просмотра записи:

ВЫБРАТЬ *

ИЗ dbo.orders

ГДЕ CustomerID = 2;

Мы можем использовать следующий оператор SQL Update для обновления таблицы заказов.Здесь мы используем псевдоним SQL для таблицы заказов. Здесь мы заменили оператор Select оператором Update без особых изменений в запросе:

Обновление O set [OrderQuantity] = 200, [OrderAmount] = 7896

ИЗ dbo.orders O

ГДЕ CustomerID = 2;

Мы можем выполнить оператор Select и проверить изменения:

Оператор SQL UPDATE с SQL JOIN

Теперь давайте воспользуемся функцией SQL Join для извлечения записи из обеих таблиц. Мы используем столбец [CustomerID] для соединения между обеими таблицами:

ВЫБРАТЬ C.CustomerName,

C.OrderCount,

O.OrderAmount,

O.OrderQuantity

ОТ клиентов C

ПРИСОЕДИНЯЙТЕСЬ к заказам O ON C.Customerid = O.CustomerID;

На выходе мы видим только три записи. Внутреннее соединение извлекает записи, которые существуют в обеих таблицах.CustomerID 1, 2, 3 существует в обеих таблицах и доступен в результате SQL Join:

Мы можем видеть значения NULL в столбце [OrderCount] таблицы Customers. Предположим, мы хотим обновить этот столбец с помощью [OrderQuantity] таблицы заказов. Мы можем использовать следующий синтаксис для инструкции SQL Server Update Join:

ОБНОВЛЕНИЕ

Таблицы

НАБОР

A.c1 = B.C1

...

ИЗ

tableA A

[ВНУТРЕННИЙ | LEFT] JOIN tableA B ON join_predicate

ГДЕ

where_predicate;

  • Укажите базовую таблицу, в которой мы хотим обновить записи. Мы также можем использовать псевдоним SQL Join вместо имени таблицы
  • Укажите столбец и значение столбца, который мы хотим обновить. Мы используем оператор Set для указания значений
  • Используйте оператор соединения SQL и укажите имя таблицы с условиями соединения.Мы можем использовать либо внутреннее соединение, либо левое соединение в этом предикате.
  • Добавьте предложение Where, чтобы обновлять только определенные строки. Это необязательный аргумент

Следующий запрос обновляет таблицу клиентов (инструкция Update C) с помощью оператора Set (SET C.OrderCount = O.OrderQuantity) с использованием таблицы соединения между клиентами и заказами (клиенты C JOIN Orders O ON C.Customerid = O.CustomerID):

ОБНОВЛЕНИЕ C

НАБОР

C.OrderCount = O.OrderQuantity

ОТ клиентов C

ПРИСОЕДИНЯЙТЕ заказы O ON C.Customerid = O. CustomerID;

Он возвращает вывод, что затронуты три строки:

Выполните оператор Select join и проверьте записи. Мы видим похожие значения в столбцах [OrderCount] и [OrderQuantity]:

Предположим, в новом финансовом году мы архивируем старые записи о клиентах и ​​начинаем с нуля в столбцах [OrderQuantity] таблицы заказов.Мы можем выполнить следующий оператор SQL Server Update Join, и он обновит столбцы [OrderQuantity] таблицы заказов:

ОБНОВЛЕНИЕ O

НАБОР

O.OrderQuantity = 0

ОТ клиентов C

ПРИСОЕДИНЯЙТЕСЬ к заказам O ON C.Customerid = O.CustomerID;

Мы не можем обновить несколько таблиц вместе с помощью SQL Server Update Join.Если мы попытаемся обновить несколько столбцов, принадлежащих разным таблицам, мы получим следующее сообщение об ошибке:

Не удалось связать составной идентификатор «O. OrderAmount».

ОБНОВЛЕНИЕ C

НАБОР

C.OrderCount = 0,

O.OrderAmount = 0,

O.OrderQuantity = 0

ОТ клиентов C

JOIN Orders O ON C.Customerid = O.CustomerID;

В этом случае мы можем использовать несколько операторов обновления. Например, следующий запрос обновляет столбец [OrderCount] таблицы клиентов:

ОБНОВЛЕНИЕ C

НАБОР

C.OrderCount = 0

ОТ клиентов C

ПРИСОЕДИНЯЙТЕ заказы O НА C.Customerid = O.CustomerID;

Операторы Next Update обновляют значение столбцов [OrderAmount] и [OrderQuantity] как нулевое в таблице Orders:

ОБНОВЛЕНИЕ O

НАБОР

O.OrderAmount = 0,

O.OrderQuantity = 0

ОТ клиентов C

ПРИСОЕДИНЯЙТЕ заказы O ON C.Customerid = O.CustomerID;

Соединение с обновлением SQL Server с левым соединением

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

Следующий оператор Select показывает результат выполнения оператора Select с левым соединением:

ВЫБРАТЬ C.CustomerName,

C.OrderCount,

O.OrderAmount,

O.OrderQuantity

FROM Customers c

Осталось

заказов JOIN O ON O.Customerid = C.CustomerID;

Здесь, в выходных данных, мы видим клиентов Джона и Дэна. Значения столбцов [OrderCount], [OrderAmount] и [OrderQuantity] равны NULL для этих клиентов:

Мы также можем использовать оператор Update с Left Join, и он обновляет записи со значениями NULL.Как подчеркивалось ранее, мы не можем использовать один оператор Update для обновления нескольких столбцов из разных таблиц.

Следующий оператор обновления обновляет значение [OrderCount] как нулевое для клиентов, имеющих значение столбца [OrderCount] NULL:

ОБНОВЛЕНИЕ C

НАБОР

C.OrderCount = 0

ОТ клиентов C

право СОЕДИНЯТЬ заказы O ON C.Customerid = O.CustomerID

, где Ordercount НУЛЬ

На следующем изображении мы видим фактический план выполнения вышеуказанного оператора SQL Update. Он использует оператор обновления кластерного индекса для обновления записей в таблице клиента:

Следующий оператор обновления обновляет значение [OrderAmount] и [OrderQuantity] как нулевое для клиентов, имеющих значение столбца [OrderAmount] NULL:

ОБНОВЛЕНИЕ O

НАБОР

O.OrderAmount = 0,

O.OrderQuantity = 0

FROM Customers C

осталось заказов JOIN O ON C.Customerid = O.CustomerID

, где OrderAmount IS NULL

Точно так же мы можем использовать следующий запрос с Right Join в операторе SQL Server Update Join:

ОБНОВЛЕНИЕ C

НАБОР

C.OrderCount = 0

ОТ клиентов C

Право заказов JOIN O ON C.Customerid = O.CustomerID

, где Ordercount IS NULL

Заключение

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

Будучи сертифицированным MCSA и сертифицированным инструктором Microsoft в Гургаоне, Индия, с 13-летним опытом работы, Раджендра работает в различных крупных компаниях, специализируясь на оптимизации производительности, мониторинге, высокой доступности и стратегиях и внедрении аварийного восстановления.Он является автором сотен авторитетных статей о SQL Server, Azure, MySQL, Linux, Power BI, настройке производительности, AWS / Amazon RDS, Git и связанных технологиях, которые на сегодняшний день просмотрели более 10 миллионов читателей.

Он является создателем одного из крупнейших бесплатных онлайн-сборников статей по одной теме с его серией из 50 статей о группах доступности SQL Server Always On. За свой вклад в сообщество SQL Server он постоянно удостаивался различных наград, включая престижную награду «Лучший автор года» в 2020 и 2021 годах на SQLShack.

Радж всегда интересуется новыми проблемами, поэтому, если вам нужна консультация по любому вопросу, затронутому в его трудах, с ним можно связаться по адресу [email protected]

Просмотреть все сообщения Раджендры Гупты

Последние сообщения Раджендры Гупты увидеть все)

Заявление об обновлении

SQL - Примеры запросов для обновления значений таблицы

SQL (произносится Seequel) означает язык структурированных запросов. Это строго типизированный, статический (типы проверяются перед запуском) язык запросов, который впервые появился в 1974 году (ууу, 46 лет!), Но изначально не был выпущен до 1986 года.

Вы могли подумать про себя, что у такого «старого» инструмента есть свои лучшие дни, но вы были бы далеко не правы. В 2019 году, согласно опросу Scale Grid DeveloperWeek, SQL использовали 60,5% респондентов, в то время как NoSQL использовали только 39,5% респондентов.

Для ясности, категория SQL была разбита на несколько подкатегорий, включая MySQL, PostgreSQL, SQL Server и т. Д., В то время как категория NoSQL была разбита на подкатегории, содержащие MongoDB, Cassandra и т. Д.

Даже в 2017 году, согласно опросу разработчиков Stack Overflow, вторым по популярности языком был SQL (сразу после JavaScript): 50% из 64 000 респондентов заявили, что они все еще используют SQL в той или иной форме.

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

Достаточно сказать, что SQL не только жив и здоров, но и процветает в современном сообществе разработчиков.

А теперь посмотрим, почему!

The Fun Parts

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

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

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

Хотя он может незначительно отличаться от вкуса к вкусу, общий синтаксис выглядит следующим образом:

ОБНОВЛЕНИЕ имя-таблицы
НАБОР имя-столбца = значение [, имя-столбца = значение]
[ ГДЕ условие ]

Квадратные скобки ([]) выше обозначают необязательные добавления к запросу.

*** Очень важно отметить, что без условия WHERE ВСЕ записи в таблице будут обновлены, как только вы выполните запрос. ***

Примеры запросов

Как наш набор данных, я буду использовать эту таблицу с именем Work_Tickets :

ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено
00061356 000931 1250 продаж @ wayneindustries.com 0,00 Ложь 079777 12,0 0
00061357 000932 1251 [email protected] 0,00 Ложь 085695 196,5 0
00061358 000933 1252 анимация @ acmetoons.com 0,00 Ложь 085569 17,5 0
Простой запрос без условий

Вот очень простой запрос на обновление, который изменит все поля UnitCost на номер 131.6152 :

UPDATE Work_Tickets

0 SET UnitCost =

Обратите внимание, что нет предложения WHERE , поэтому каждая строка в таблице будет обновлена, и теперь наш набор данных будет выглядеть так:

ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено
00061356 000931 1250 продаж @ wayneindustires.com 131.6152 Ложь 079777 12,0 0
00061357 000932 1251 [email protected] 131.6152 Ложь 085695 196,5 0
00061358 000933 1252 анимация @ acmetoons.com 131.6152 Ложь 085569 17,5 0
Простые запросы с условиями

Вот простой запрос с одним условием:

UPDATE Work_Tickets
SET Billed = true
WHERE UnitCost 0.00

Этот запрос обновит поле Billed до значения true в каждой строке, которая соответствует условию UnitCost , не равному 0.После того, как мы запустим наш запрос, набор данных будет выглядеть так:

ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено
00061356 000931 1250 продаж @ wayneindustires.com 131.6152 Истинно 079777 12,0 0
00061357 000932 1251 [email protected] 131.6152 Истинно 085695 196,5 0
00061358 000933 1252 анимация @ acmetoons.com 131.6152 Истинно 085569 17,5 0

Ниже приведен запрос, в котором мы меняем ParentLineKey на строку 000134 , где SalesOrderNum и WorkTicketNum соответствуют заданным строкам.

ОБНОВЛЕНИЕ Work_Tickets
SET ParentLineKey = 000134
ГДЕ SalesOrderNum = 00061358 и WorkTicketNumber = 000933

Итак, поле 085569 в наборе данных ParentLineKey будет заменено на 000134 и теперь будет выглядеть так: 000134 ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено 00061356 000931 1250 продаж @ wayneindustires.com 131.6152 Истинно 079777 12,0 0 00061357 000932 1251 [email protected] 131.6152 Истинно 085695 196,5 0 00061358 000933 1252 анимация @ acmetoons.com 131.6152 Истинно 000134 17,5 0

Обновление нескольких полей

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

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

UPDATE Work_Tickets
SET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72
ГДЕ SalesOrderNum = 00061358

И вот результат с обновленными полями после выполнения запроса:

ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено
00061356 000931 1250 продаж @ wayneindustires.com 131.6152 Истинно 079777 12,0 0
00061357 000932 1251 [email protected] 131.6152 Истинно 085695 196,5 0
00061358 000933 1252 анимация @ acmetoons.com 129,8511 Истинно 000134 72 72
Использование обновления в подзапросе

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

Синтаксис обновления столбца / таблицы немного меняется, если мы хотим перенести данные из другой таблицы:

ОБНОВЛЕНИЕ имя-таблицы
НАБОР имя-столбца = (ВЫБРАТЬ имя столбца)
FROM table2-name
WHERE condition (s))

[ WHERE condition ]

И вот две таблицы, которые мы будем использовать для этого запроса - таблица Work_Tickets:

ПродажиНомер заказа Номер рабочего билета Customer_Code Контактная информация клиентов Стоимость единицы Счет ParentLineKey Кол-во_Заказано Кол-во_Поставлено
00061356 000931 1250 продаж @ wayneindustires.com 131.6152 Истинно 079777 12,0 0
00061357 000932 1251 [email protected] 131.6152 Истинно 085695 196,5 0
00061358 000933 1252 анимация @ acmetoons.com 129,8511 Истинно 000134 72 72

и таблица Customer_Info:

Имя Промышленность Код Адрес Город Скидка Телефон Электронная почта
Уэйн Энтерпрайзис Оборона, вооружение, авиакосмическая промышленность, инженерия НЕТ 1631 Путь Темного рыцаря Готэм 19.75 5556614000 [email protected]
Stark Industries Оборона, вооружение, защита 1251 5641 Утюг Dr Не разглашается 19,73 9993126156 [email protected]
Acme Corp Комедия, смех, анимация 1252 24569 Улыбающаяся улица Мультяшный город 17.53 3216549877 [email protected]

Оператор UPDATE с подзапросом выглядит следующим образом:

UPDATE Customer_Info
SET Code = (ВЫБРАТЬ Customer_Code
FROM Work_Tickets
WHERE Work_Tickets.Customer_Contact = Work_Info2

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

Имя Промышленность Код Адрес Город Скидка Телефон Электронная почта
Уэйн Энтерпрайзис Оборона, вооружение, авиакосмическая промышленность, инженерия 1250 1631 Путь Темного рыцаря Готэм 19.75 5556614000 [email protected]
Stark Industries Оборона, вооружение, защита 1251 5641 Утюг Dr Не разглашается 19,73 9993126156 [email protected]
Acme Corp Комедия, смех, анимация 1252 24569 Улыбающаяся улица Мультяшный город 17.53 3216549877 [email protected]

Заключение

Я надеюсь, что эта статья помогла вам понять, как оператор UPDATE работает в SQL.

Теперь вы готовы писать свои собственные операторы SQL UPDATE , как чемпион! После того, как вы это сделаете, я бы хотел, чтобы вы поделились ими со мной в социальных сетях!

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

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

Если у вас есть вопросы по этой статье или в целом, мои личные сообщения открыты - приходите поздороваться в Твиттере или в любой из моих других учетных записей в социальных сетях, которые вы можете найти под подпиской на информационный бюллетень на главной странице моего блога или в моем профиль здесь, в FCC :)

Удачного дня и счастливого кодирования, друг!

Обновить значение SQL с помощью кнопки в Gridview - C # /.NET - Развертывание программного обеспечения и исправления

У меня есть Gridview, который извлекает customerName, acctNum, phoneNum, lastLeak для всего, что старше 5 лет, поэтому наши драйверы знают, что требует проверки на утечку. В этом сетке мне нужна кнопка, когда они нажимают на нее, чтобы взять старую дату и обновить ее до сегодняшней даты ... как я могу это сделать?

Вот моя сетка:

HTML

 
        <Столбцы>
            
            
            
            
            
            
            
        
    
     
 

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

SQL

 ОБНОВЛЕНИЕ custInfo
УСТАНОВИТЬ lastLeak = '4/5/2017'
ГДЕ customerName = @customername;
 

Отредактировано 5 апреля 2017 г. в 16:19 UTC


UPDATE SQL-запрос для обновления данных в таблице

Давайте возьмем пример реальной проблемы. В наши дни Facebook предоставляет возможность Редактировать свое обновление статуса. Как вы думаете, как это работает? Да, с помощью команды Обновить SQL.

Давайте узнаем о синтаксисе и использовании команды UPDATE .


команда ОБНОВЛЕНИЕ

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

.

  ОБНОВЛЕНИЕ имя_таблицы УСТАНОВИТЬ имя_столбца = новое_значение ГДЕ некоторое_условие;  

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

Возьмем образец таблицы студент ,

student_id имя возраст
101 Адам 15
102 Alex
103 chris 14
 908 SET ученик = 18 ГДЕ student_id = 102;  
S_id S_Name возраст
101 Adam 15
102 Alex 18
103 chris 14

выше Если мы не используем предложение WHERE , то наш запрос на обновление обновит возраст для всех столбцов таблицы до 18 .


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

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

  ОБНОВИТЬ НАБОР учеников name = 'Abhi', age = 17, где s_id = 103;
  

Приведенная выше команда обновит два столбца записи, которая имеет s_id 103.

s_id имя возраст
101 Адам 15
102 Alex 18
103 Abhi 17

9198 UPATE Команда: увеличение целочисленного значения

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

Например, если нам нужно обновлять столбец age таблицы student каждый год для каждого студента, то мы можем просто запустить следующий оператор UPDATE для выполнения следующей операции:

  ОБНОВИТЬ УСТАНОВИТЬ учащегося age = age + 1;  

Как видите, мы использовали значение age = age + 1 , чтобы увеличить значение age на 1.

ПРИМЕЧАНИЕ: Этот стиль работает только для целочисленных значений.



Скрытая жемчужина SQL Server: ОБНОВЛЕНИЕ от SELECT

3 простых способа использования UPDATE из SELECT, облегчающих вашу работу

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

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

Если вы хотите продолжить, вы можете получить сценарий здесь: Скрытая жемчужина SQL Server - ОБНОВЛЕНИЕ от SELECT.sql

Разработайте свое ОБНОВЛЕНИЕ с ВЫБОРА

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

Таблица dbo.Orders содержит столбец is_archived.Это используется для архивирования заказов старше 90 дней. Однако у нас есть дополнительное правило, согласно которому заказы, которые еще не были оплачены или отправлены, не могут быть заархивированы. (В этом примере столбец is_archived не имеет физического эффекта. См. Мою статью SQL Server Pro Использование разделов таблиц для архивации старых данных в средах OLTP, если вам интересно, как превратить столбец is_archived в фактический переключатель архива.)

Оператор SELECT для возврата архивируемых записей будет выглядеть следующим образом:

[sql]
ВЫБЕРИТЕ *
ИЗ dbo.Заказы КАК O
ГДЕ O.order_date И O.is_paid = 1
И O.is_shipped = 1;
[/ sql]

А теперь добавим к нему немного магии:

[sql]
--UPDATE O SET / *
SELECT *, - * /
is_archived = 1
FROM dbo.Orders AS O
WHERE O.order_date AND O.is_paid = 1
И O.is_shipped = 1;
[/ sql]

Это по-прежнему простой оператор SELECT. Мы просто добавили два комментария и дополнительную колонку.В этом дополнительном столбце используется необычный синтаксис псевдонима name = value с более распространенным синтаксисом имени AS name.

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

[sql]
UPDATE O SET / *
SELECT *, - * /
is_archived = 1
FROM dbo.Orders AS O
WHERE O.order_date AND O.is_paid = 1
И O.is_shipped = 1;
[/ sql]

Это обновляет таблицу dbo.Orders точно так же, как и оператор UPDATE dbo.Orders SET…, потому что таблица dbo.Orders имеет псевдоним O, а UPDATE ссылается на тот же псевдоним O.

Добавление JOIN к оператору UPDATE

Вопрос, который позволил нам здесь, заключался в том, как мы можем использовать данные в одной таблице для обновления другой таблицы. Было бы неплохо, если бы мы могли просто «ПРИСОЕДИНЯЙТЕСЬ»? Хорошие новости: приведенный выше синтаксис позволяет нам это сделать.

Недавно в таблицу dbo.Customers был добавлен столбец order_count. Наша задача теперь состоит в том, чтобы правильно оценить этот столбец на основе фактических заказов, размещенных каждым клиентом. Мы начинаем снова, записывая сначала select:

[sql]
--UPDATE C SET / *
SELECT *, - * /
order_count = OA.cnt
FROM dbo.Customers AS C
JOIN (
SELECT O.customer_id,
COUNT (1) cnt
FROM dbo.Orders AS O
ГРУППА ПО O.customer_id
) OA
ON C.customer_id = OA.Пользовательский ИД;
[/ sql]

Как только оператор SELECT вернет правильные результаты, его легко переключить на UPDATE:

[sql]
UPDATE C SET / *
SELECT *, - * /
order_count = OA.cnt
FROM dbo.Customers AS C
JOIN (
SELECT O.customer_id,
COUNT (1) cnt
FROM dbo.Orders AS O
GROUP BY O.customer_id
) OA
ON C.customer_id = OA.customer_id;
[/ sql]

Из-за использования псевдонима C SQL Server знает, что нужно обновить dbo.Таблица клиентов, извлекая необходимую информацию из других таблиц, упомянутых в заявлении.

Использование UPDATE с CTE

Если вам нравятся CTE, вы можете пойти еще дальше с этим. Пока SQL Server может легко определить, что вы собираетесь обновить, вы можете «ОБНОВИТЬ» CTE напрямую, используя очень похожий синтаксис:

[sql]
WITH order_counts AS
(
SELECT O.customer_id,
COUNT (1) cnt
FROM dbo.Orders AS O
GROUP BY O.customer_id
),
customer_order_counts AS
(
SELECT
C.customer_id,
C.name,
C.order_count,
OC.cnt new_order_cnt
FROM dbo.Customers AS C
JOINcustomer_counts AS OCustomer_count_count_count_count_s .customer_id
)
UPDATE COC SET / *
SELECT *, - * /
order_count = COC.new_order_cnt
FROM customer_order_counts AS COC;
[/ sql]

Единственное, что вы не можете сделать ни с одним из вышеперечисленных операторов, - это обновить данные в двух таблицах одновременно.

Слово предостережения

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

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

Проблема в том, что нет гарантии, в каком порядке это произойдет. Порядок зависит от выбранного плана выполнения и может быть изменен в любое время. Таким образом, хотя приведенный выше оператор может фактически привести к записи даты последнего порядка в ваших тестах, он, вероятно, будет выполняться в другом порядке, как только оператор обнаружит большой объем данных. Это приведет к трудным для отладки проблемам, поэтому обратите внимание на эту возможность при написании операторов UPDATE FROM SELECT.

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

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