Для изменения существующей процедуры используется оператор ALTER PROC, параметры этой команды аналогичны параметрам команды создания процедуры.
Для этого необходимо использовать специальную системную хранимую процедуру:
sp_rename ‘ИмяОбъекта’ ‘НовоеИмяОбъекта’.
Для удаления хранимой процедуры используется команда Transact‑SQL:
DROP PROC ИмяПроцедуры.
Представление (View) является еще одним объектом, составляющим логическую структуру любой базы данных. Представление для конечных пользователей выглядит как таблица, однако при этом не содержит данных, а лишь представляет их. Физически же представляемые данные расположены в различных таблицах базы данных.
Представление реализуется в виде сохраненного запроса, на основе которого и производится выборка из различных таблиц базы данных.
Представления обладают следующими преимуществами:
· обеспечивают конфиденциальность информации, т.к. позволяют отобразить только необходимую информацию, скрывая определенные поля;
· упрощают представление данных, т.к. пользователь работает с представлением как с единой таблицей, которая создана на основе выборки данных из нескольких таблиц;
· управляют правами доступа к данным, например, вместо того чтобы предоставлять права на выполнение запросов к определенным полям таблиц, проще разрешить выполнение запросов через представление.
MS SQL Server предоставляет различные способы создания представлений: с помощью средств Transact-SQL и в утилите администрирования Management Studio.
Для создания представления используется команда CREATE VIEW, правом ее выполнения обладают члены ролей sysadmin, db_owner, db_dlladmin:
CREATE VIEW ИмяПредставления [(поле [,...n])]
[WITH ENCRYPTION]
AS
ЗапросВыборки
При указании ИмяПредставления необходимо придерживаться ранее определенных правил именования объектов, также это имя не должно совпадать с именем уже существующей таблицы в базе данных. Параметр WITH ENCRYPTION определяет шифрование кода запроса и гарантирует, что пользователи не смогут просмотреть и использовать его.
ЗапросВыборки представляет собой оператор SELECT, параметры которого и определяют содержимое представления. Имена полей представления задаются либо с помощью псевдонимов в операторе выборки, либо указываются в параметре поле.
Например, создадим представление, содержащее лишь такую информацию о сотрудниках компании AdventureWorks, как: должность и логин сотрудника, дата рождения.
CREATE VIEW InfoEmployees ([Номер], [Фамилия], [Дата рождения]) AS
Для просмотра содержимого проекции выполняется следующий запрос:
SELECT * FROM InfoEmployees
С помощью данного представления ограничен доступ к некоторым полям исходной таблицы Employee, в этом случае говорят, что на таблицу наложен вертикальный фильтр, т.е. ограничен доступ к части полей таблицы без защиты на уровне столбцов.
Если в коде запроса выборки определено условие отбора записей, то говорят, что на таблицу наложен горизонтальный фильтр. Например, следующее представление обеспечивает доступ к информации о производителях, имеющих онлайн-службы для заказа товара:
CREATE VIEW OnlineVendors
AS
SELECT [Name]
FROM Purchasing.Vendor
WHERE PurchasingWebServiceURL IS NOT NULL
В запросе выборки может быть указана команда SELECT любой сложности, однако при этом запрещается использовать раздела ORDER BY, который в дальнейшем можно применить при выборке данных из созданного представления. Также рекомендуется создавать представления только на основе таблиц, для которых выполнено внутреннее соединение.
Например, создадим представление, отображающее суммарную стоимость каждого заказа с указанием заказчика и его номера:
CREATE VIEW InfoOrders
AS
SELECT FirstName + ' ' + LastName as [Название компании],
SalesOrderHeader.SalesOrderID as [Номер заказа],
Convert (money, sum(UnitPrice*OrderQty*(1-UnitPriceDiscount)),0) as [Итог]
FROM (Person.Contact INNER JOIN Sales.SalesOrderHeader
ON Contact.ContactID=SalesOrderHeader.ContactID)
INNER JOIN Sales.SalesOrderDetail
ON SalesOrderHeader.SalesOrderID=SalesOrderDetail.SalesOrderID
GROUP BY SalesOrderHeader.SalesOrderID, FirstName + ' ' + LastName
Следует помнить, что использование представлений не способствует производительности. Обращение к представлению вызывает выполнение его внутреннего кода, таким образом, в лучшем случае представления НЕ снизят производительность БД.