loading..
Русский    English
09:10
листать

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

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

  1. UPDATE <имя таблицы>
  2. SET {<имя столбца> = {<выражение для вычисления значения столбца>
  3. | NULL
  4. | DEFAULT},...}
  5. [ {WHERE <предикат>}]

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

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

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

  1. UPDATE Laptop
  2. SET price = price*0.9;

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

  1. UPDATE Laptop
  2. SET hd = ram/2 WHERE hd < 10;

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

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

  1. UPDATE Laptop
  2. SET hd = CASE
  3. WHEN ram < 128
  4. THEN 20
  5. ELSE 40
  6. END;

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

  1. UPDATE Laptop
  2. SET speed = (SELECT MAX(speed)
  3. FROM Laptop
  4. );

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

  1. UPDATE Laptop
  2. SET code = 5
  3. WHERE code = 4;
не будет выполнен, так как автоикрементируемое поле не допускает обновления, и мы получим соответствующее сообщение об ошибке. Чтобы выполнить все же эту задачу, можно поступить следующим образом. Сначала вставить нужную строку, используя SET IDENTITY_INSERT, после чего удалить старую строку:

  1. SET IDENTITY_INSERT Laptop_ID ON;
  2. INSERT INTO Laptop_ID(code, model, speed, ram, hd, price, screen)
  3. SELECT 5, model, speed, ram, hd, price, screen
  4. FROM Laptop_ID WHERE code = 4;
  5. DELETE FROM Laptop_ID
  6. WHERE code = 4;

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

Bookmark and Share
Страницы: 1 2
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE CONSTRAINT Convert COUNT CROSS APPLY CTE DATEADD DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FOREIGN KEY FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL IS NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX Больше тэгов
Учебник обновлялся
вчера
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100