UPDATE на основе соединения.
Поддерживается запись операции UPDATE на базе соединения. Пример: увеличитьна 5% скидку на все товары заказов, сделанных клиентом 1. UPDATE OD SET discount = discount + 0.05 FROM dbo.OrderDetails AS OD JOIN dbo.Orders AS O ON OD.orderid = O.orderid WHERE custid = 1; Пример эквивалентного вложенного запроса: UPDATE dbo.OrderDetails SET discount = discount + 0.05 WHERE EXISTS (SELECT * FROM dbo.Orders AS O WHERE O.orderid = OrderDetails.orderid AND custid = 1); Пример: изменяется столбец SalesYTD в таблице SalesPerson для отображения самой последней информации о продажах, зафиксированной в таблице SalesOrderHeader. USE AdventureWorks; GO UPDATE Sales.SalesPerson SET SalesYTD = SalesYTD + SubTotal FROM Sales.SalesPerson AS sp JOIN Sales.SalesOrderHeader AS so ON sp.SalesPersonID = so.SalesPersonID AND so.OrderDate = (SELECT MAX(OrderDate) FROM Sales.SalesOrderHeader WHERE SalesPersonID = sp.SalesPersonID); GO Пример: В предыдущем примере подразумевается, что на конкретного менеджера по продажам на каждую конкретную дату записана только одна продажа. В ситуации, когда один менеджер может зарегистрировать за один день несколько продаж, все продажи одного менеджера должны объединяться внутри инструкции UPDATE, как показано в следующем примере: USE AdventureWorks; GO UPDATE Sales.SalesPerson SET SalesYTD = SalesYTD + (SELECT SUM(so.SubTotal) FROM Sales.SalesOrderHeader AS so WHERE so.OrderDate = (SELECT MAX(OrderDate) FROM Sales.SalesOrderHeader AS so2 WHERE so2.SalesPersonID = so.SalesPersonID) AND Sales.SalesPerson.SalesPersonID = so.SalesPersonID GROUP BY so.SalesPersonID); GO Понятие представления. Операции создания представлений. Представления, или просмотры (VIEW), представляют собой временные, производные (иначе - виртуальные) таблицы и являются объектами базы данных, информация в которых не хранится постоянно, как в базовых таблицах, а формируется динамически при обращении к ним. Обычные таблицы относятся к базовым, т.е. содержащим данные и постоянно находящимся на устройстве хранения информации. Представление не может существовать само по себе, а определяется только в терминах одной или нескольких таблиц.
У двух рассмотренных ранее типов табличных выражений – производных таблиц и ОТВ – ограниченная область действия, единственная инструкция языка. Как только внешний запрос к табличным выражениям завершается, они исчезают и не могут использоваться многократно. Представления и подставляемые табличные функции (будут рассмотрены далее) допускают многократное использование, их определения хранятся в объекте базы данных. Созданные один раз, эти объекты становятся постоянными компонентами базы данных и исчезают в случае явного удаления.
Применение представлений позволяет разработчику базы данных обеспечить каждому пользователю или группе пользователей наиболее подходящие способы работы с данными, что решает проблему простоты их использования и безопасности. Содержимое представлений выбирается из других таблиц с помощью выполнения запроса, причем при изменении значений в таблицах данные в представлении автоматически меняются. Представление - это фактически тот же запрос, который выполняется всякий раз при участии в какой-либо команде. Результат выполнения этого запроса в каждый момент времени становится содержанием представления. У пользователя создается впечатление, что он работает с настоящей, реально существующей таблицей. Представление - это предопределенный запрос, хранящийся в базе данных, который выглядит подобно обычной таблице и не требует для своего хранения дисковой памяти. Для хранения представления используется только оперативная память. В отличие от других объектов базы данных представление не занимает дисковой памяти за исключением памяти, необходимой для хранения определения самого представления. У СУБД есть две возможности реализации представлений. Если его определение простое, то система формирует каждую запись представления по мере необходимости, постепенно считывая исходные данные из базовых таблиц.
В случае сложного определения СУБД приходится сначала выполнить такую операцию, как материализация представления, т.е. сохранить информацию, из которой состоит представление, во временной таблице. Затем система приступает к выполнению пользовательской команды и формированию ее результатов, после чего временная таблица удаляется.
Создания и изменения представлений в стандарте языка и реализации в MS SQL Server совпадают и представлены следующей командой: <определение_просмотра>::= { CREATE| ALTER} VIEW имя_просмотра [(имя_столбца [,...n])] [WITH <view_attribute> [,...n ]] AS SELECT_оператор [WITH CHECK OPTION]
<view_attribute>::= { [ ENCRYPTION ] [ SCHEMABINDING ] [ VIEW_METADATA ] }
Рассмотрим назначение основных параметров. При необходимости в представлении можно задать новое имя для каждого столбца виртуальной таблицы. При этом надо помнить, что если указывается список столбцов, то он должен содержать ровно столько столбцов, сколько содержит их SQL-запрос.
Читайте также: Cannot update read-only view RASXODDOC Воспользуйтесь поиском по сайту: ![]() ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|