Главная » Microsoft SQL Server, Базы данных » Работа с представлениями

0

В утилите SQL Server Management Studio представления можно создавать, редактировать, выполнять и вставлять в другие запросы.

Создание представлений в Management Studio

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

В утилите Management Studio представления перечислены в собственном узле в каждой базе данных.

SQL Server Management Studio предлагает удобную среду для работы с пред- Новинка ^ ставлениями, предлагая инструменты создания запросов, редактирования дан- 2005                  ных, сохранения графической структуры таблицы и многое другое.

Команда New View в контекстном меню позволит запустить конструктор запросов в режиме создания представлений (рис. 14.1).

Puc. 14.1. Создание представления в конструкторе запросов утилиты Management Studio

Представления, реляционная алгебра, абстракция и безопасность

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

SQL Server поддерживает систему безопасности на уровне столбцов, и это очень мощный механизм. Проблема состоит в том, что разовые запросы, создаваемые конечными пользователями, не понимающими схему, очень часто вызывают ошибки безопасности. Рекомендуемое решение состоит во внедрении защиты на уровень абстракции, который изолирует физическую схему от доступа к данным. Этот уровень абстракции базы данных может быть создан с помощью представлений и хранимых процедур. Он может ограничить то, что может проектироваться во внешний мир, конкретным набором столбцов. Предоставление пользователям доступа к определенному множеству данных или возможности выполнения только представлений и хранимых процедур защищает от них данные в физических таблицах.

Более подробно об уровнях абстракции вы узнаете в главах 25 и 40, где рассматриваются вопросы конфигурирования безопасности объектов.

Конструктор представлений работает в конструкторе запросов Management Studio. Фактический код SQL отображается и редактируется на панели SQL. Столбцы в представление можно добавлять на панелях Diagram, Grid и SQL. Функция добавления таблиц доступна в контекстном меню, а также на панели инструментов. Здесь можно добавлять таблицы, другие представления, синонимы и табличные функции.

Таблицы и другие представления могут быть добавлены посредством перетаскивания их на панель Diagram из окна Object Explorer или с помощью пункта контекстного меню Add Table.

Функция добавления управляемых таблиц (Add Derived Table) способна добавить в предложение FROM представления в качестве источника данных подзапрос. Код SQL этого подзапроса можно ввести вручную на панели SQL.

Дополнительная Более подробно об использовании конструктора запросов см. в главе 6, посвя- информация щенной работе с утилитой Management Studio.

Кнопка Verify SQL Syntax позволяет проверить синтаксис инструкций SQL. В то же время она не проверяет имена таблиц, столбцов и представлений в инструкции SELECT.

Кнопка Save панели инструментов запускает сценарий фактического создания представления в базе данных. Следует отметить, что для сохранения инструкция SELECT должна быть свободна от ошибок.

После создания представления его можно редактировать в Management Studio, выделяя название и выбирая в контекстном меню команду Modify View.

Для тестирования инструкции SELECT представления в конструкторе запросов щелкните на кнопке Execute SQL или нажмите клавишу <F5>.

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

Создание представлений с помощью кода DDL

Представлениями можно управлять в редакторе запросов, выполняя сценарии SQL, которые используют команды языка DDL: CREATE, ALTER и DROP. Основной синтаксис создания представления следующий:

USE СНА2

CREATE дЪо.имя_представления AS

инструкция_ SELECT

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

CREATE VIEW dbo.vEventList AS

SELECT dbo.CustomerType.Name AS Customer,

dbo.Customer.LastName, dbo.Customer.FirstName, dbo.Customer.Nickname,

dbo.Event_mm_Customer.ConfirmDate, dbo.Event.Code, dbo.Event.DateBegin, dbo.Tour.Name AS Tour, dbo.BaseCamp.Name, dbo.Event.Comment FROM dbo.Tour

INNER JOIN dbo.Event

ON dbo.Tour.TourlD = dbo.Event.TourlD INNER JOIN dbo.Event_mm_Customer

ON dbo.Event.EventID = dbo.Event_mm_Customer.EventID INNER JOIN dbo.Customer

ON dbo.Event_mm_Customer.CustomerlD = dbo.Customer.CustomerlD LEFT OUTER JOIN dbo.CustomerType ON dbo.Customer.CustomerTypeID

= dbo.CustomerType.CustomerTypelD INNER JOIN dbo.BaseCamp ON dbo.Tour.BaseCampID = dbo.BaseCamp.BaseCampID

Попытка создать представление, которое уже существует, вызовет ошибку. Когда представление создано, инструкцию SELECT можно с легкостью отредактировать с помощью команды ALTER:

ALTER dbo.ViewName AS

SQL Select Statement

Команда ALTER поставляет представлению новую инструкцию SELECT. Именно здесь вступает в игру Object Explorer. Чтобы автоматически сгенерировать инструкцию ALTER из существующего представления, в окне Object Explorer перейдите к списку представлений и выберите в контекстном меню команду Script View as1^ Alter to^New Query Editor Windows.

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

Чтобы удалить представление из базы данных, используйте команду DROP:

DROP VIEW dbo.ViewName

В представлении, предназначенном для многократного запуска, следующий код удалит его и воссоздаст заново:

IF EXISTS(SELECT * FROM SysObjects WHERE Name = ‘имя_представления’ ) DROP VIEW dbo.имя_представления CREATE dbo.имя_представления AS

инструкция_5ЕЬЕСТ

Предложение order by и представления

Представления служат источником данных для других запросов и не поддерживают сортировку внутри себя. Например, следующий код извлекает данные из представления vEventList и упорядочивает их по полям Event Code и name. Предложение ORDER BY не является частью представления vEventList, а применяется к нему с помощью вызова инструкции SQL:

SELECT EventCode, LastName, FirstName, IsNull(NickName,”)

FROM dbo.vEventList

ORDER BY EventCode, LastName, FirstName

В то же время синтаксис языка T-SQL допускает использование в представлениях предиката ТОР, хотя последний бесполезен без предложения ORDER BY. В то же время если представление включает в себя предикат ТОР 10 0 PERCENT, оно может включать и ORDER BY.

CREATE VIEW dbo.vCapeHatterasTour AS

SELECT TOP 100 PERCENT TourName, BaseCampID FROM dbo.Tour ORDER BY TourName

В версии SQL Server 2000 включение в представление выражения тор юо Новинка 1 percent допускало также использование предложения order by. Однако в 2005     SQL Server 2005 эта ошибка была исправлена, и предложение order by суще

ствует только для поддержки предиката тор. Предикат тор без порядка сортировки будет возвращать только случайные строки и не будет иметь практического значения. Предикат тор юо percent с предложением order by в SQL Server 2005 не будет сортировать данные в представлении.

Ограничения в представлениях

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

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

SELECT * INTO Table

?               Представление не может обращаться к временной таблице (содержащей в имени знак решетки) или табличной переменной, поскольку такие таблицы недолговечны.

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

Выполнение представлений

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

Именно поэтому контекстное меню Open View утилиты Management Studio автоматически генерирует простой запрос, извлекая из представления все столбцы. Представление отображает только результаты. Однако включение других панелей конструктора запросов позволяет увидеть и сам запрос, извлеченный из представления.

Панель SQL отобразит представление в предложении FROM инструкции SELECT. Именно в такой форме на представление ссылаются пользователи:

SELECT *

FROM vEventList

Когда представления вызываются из пользовательских приложений или из разовых запросов, условие WHERE обычно используется для извлечения из представления корректных данных. Условие WHERE может быть введено на панеле GRID или SQL:

SELECT * FROM dbo.vEventList WHERE (EventCode = ‘101’)

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии