Справка по SQL | страница 36




>UPDATE Laptop

> SET speed = (SELECT MAX(speed) FROM Laptop)


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


>UPDATE Laptop SET code=5 WHERE code=4


не будет выполнен, т.к. автоикрементируемое поле не допускает обновления, и мы получим соответствующее сообщение об ошибке. Чтобы выполнить все же эту задачу, можно поступить следующим образом. Сначала вставить нужную строку, используя SET IDENTITY_INSERT, после чего удалить старую строку:


>SET IDENTITY_INSERT Laptop ON

>INSERT INTO Laptop_ID(code, model, speed, ram, hd, price, screen)

> SELECT 5, model, speed, ram, hd, price, screen

> FROM Laptop_ID WHERE code=4

>DELETE FROM Laptop_ID WHERE code=4


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

В Transact-SQL оператор UPDATE расширяет стандарт за счет использования необязательного предложения FROM. В этом предложении специфицируется таблица, обеспечивающая критерий для операции обновления. Дополнительную гибкость здесь дает использование операций соединения таблиц.

Пример. Пусть требуется указать "No PC" (нет ПК) в столбце type для тех моделей ПК из таблицы Product, для которых нет соответствующих строк в таблице PC. Решение посредством соединения таблиц можно записать так:


>UPDATE Product

> SET type='No PC'

> FROM Product pr LEFT JOIN PC ON pr.model=pc.model

> WHERE type='pc' AND pc.model IS NULL


Здесь используется внешнее соединение, в результате чего столбец pc.model для моделей ПК, отсутствующих в таблице PC, будет содержать NULL-значение, что и используется для идентификации подлежащих обновлению строк. Естественно, эта задача имеет решение и в "стандартном" исполнении:


>UPDATE Product

> SET type='No PC'

> WHERE type='pc' and model NOT IN (SELECT model FROM PC)


Оператор DELETE


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

DELETE FROM [WHERE ];

Если предложение WHERE отсутствует, удаляются все строки из таблицы или представления (представление должно быть обновляемым). Более быстро эту операцию (удаление всех строк из таблицы) в Transact-SQL можно также выполнить с помощью команды

>TRUNCATE TABLE

Однако есть ряд отличий в реализации команды