CREATE VIEW (Transact-SQL)
Изменения: 17 ноября 2008 г.
Создает виртуальную таблицу, представляющую данные одной или более таблиц альтернативным образом. Инструкция CREATE VIEW должна быть первой в пакетном запросе.
Соглашения о синтаксическом обозначении в Transact-SQL
Синтаксис
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ] [ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ] }
Аргументы
- schema_name
Имя схемы, которой принадлежит представление.
- view_name
Имя представления. Имена представлений должны соответствовать требованиям, предъявляемым к идентификаторам. Указывать имя владельца представления не обязательно.
column
Имя, которое будет иметь столбец в представлении. Имя столбца требуется только в тех случаях, когда столбец формируется на основе арифметического выражения, функции или константы, если два или более столбцов могут по иной причине получить одинаковые имена (как правило, в результате соединения) или если столбцу представления назначается имя, отличное от имени столбца, от которого он произведен. Назначать столбцам имена можно также в инструкции SELECT.Если аргумент column не указан, столбцам представления назначаются такие же имена, которые имеют столбцы в инструкции SELECT.
Примечание. В столбцах представления разрешения для имени столбца применяются с инструкцией CREATE VIEW или ALTER VIEW вне зависимости от источника базовых данных. Например, если в инструкции CREATE VIEW были заданы разрешения для столбца SalesOrderID, инструкция ALTER VIEW может переименовать столбец SalesOrderID, например в OrderRef, и все же иметь разрешения, связанные с представлением, в котором используется столбец SalesOrderID.
- AS
Определяет действия, которые должны быть выполнены в представлении.
select_statement
Инструкция SELECT, определяющая представление. В этой инструкции можно указывать более одной таблицы и другие представления. Для выбора объектов, указанных в предложении SELECT создаваемого представления, необходимы соответствующие разрешения.Представление не обязательно является простым подмножеством строк и столбцов одной конкретной таблицы. С помощью предложения SELECT можно создавать представление, использующее более одной таблицы, или другие представления любой степени сложности.
При использовании в определении индексированного представления инструкция SELECT должна содержать указание одной таблицы или соединять инструкцией JOIN несколько таблиц с необязательной статистической обработкой.
Предложения SELECT, используемые в определении представления, не могут включать следующие элементы:
- предложения COMPUTE и COMPUTE BY;
- предложение ORDER BY, если только в списке выбора инструкции SELECT нет также предложения TOP;
Примечание. Предложение ORDER BY используется в определении представления только для упорядочивания строк, возвращаемых предложением TOP. Предложение ORDER BY не гарантирует упорядочивания результатов при запросе представления, если оно не указано в самом запросе. - ключевое слово INTO;
- предложение OPTION;
- ссылка на временную таблицу или табличную переменную.
Так как аргумент select_statement использует инструкцию SELECT, допустимо включать в состав предложения FROM подсказки <join_hint> и <table_hint>. Дополнительные сведения см. в разделах FROM (Transact-SQL) и SELECT (Transact-SQL).
В аргументе select_statement можно использовать функции и множественные инструкции SELECT, разделенные оператором UNION или UNION ALL.
CHECK OPTION
Обеспечивает соответствие всех выполняемых для представления инструкций модификации данных критериям, заданным при помощи аргумента select_statement. Если строка изменяется посредством представления, предложение WITH CHECK OPTION гарантирует, что после фиксации изменений доступ к данным из представления сохранится.Примечание. Любые обновления, произведенные непосредственно в базовых таблицах представления, не проверяются в контексте представления — даже в том случае, если указано предложение CHECK OPTION.
- ENCRYPTION
Выполняет шифрование элементов представления sys.syscomments, содержащего текст инструкции CREATE VIEW. Использование предложения WITH ENCRYPTION предотвращает публикацию представления в рамках репликации SQL Server.
SCHEMABINDING
Привязывает представление к схеме базовой таблицы или таблиц. Если аргумент SCHEMABINDING указан, нельзя изменить базовую таблицу или таблицы таким способом, который может повлиять на определение представления. Сначала нужно изменить или удалить само представление для сброса зависимостей от таблицы, которую требуется изменить. При применении параметра SCHEMABINDING имена таблиц, представлений или пользовательских функций, упоминаемые в аргументе select_statement, должны быть двухкомпонентными (schema**.**object). Все фигурирующие в выражении объекты должны относиться к одной базе данных.Представления или таблицы, входящие в представление, созданное при помощи предложения SCHEMABINDING, не могут быть сброшены, пока это представление не будет удалено или изменено таким образом, чтобы оно более не было привязано к схеме. В противном случае компонент Microsoft SQL Server 2005 Database Engine выдаст ошибку. Кроме того, выполнение инструкций ALTER TABLE для таблиц, которые входят в представления, привязанные к схемам, завершается ошибкой, если эти инструкции влияют на определение представления.
Предложение SCHEMABINDING нельзя указывать, если представление содержит столбцы, имеющие тип-псевдоним.
VIEW_METADATA
Указывает, что экземпляр SQL Server возвратит в API-интерфейсы DB-Library, ODBC и OLE DB сведения метаданных о представлении вместо базовой таблицы или таблиц, когда метаданные режима обзора затребованы для запроса, который ссылается на представление. Метаданные режима обзора — это дополнительные метаданные, которые экземпляр SQL Server возвращает вышеназванным клиентским API-интерфейсам. Эти метаданные позволяют клиентским API-интерфейсам реализовывать обновляемые клиентские курсоры. Метаданные режима просмотра содержат сведения о базовой таблице, которой принадлежат столбцы в результирующем наборе.Для представлений, созданных с применением предложения VIEW_METADATA, в метаданных режима просмотра возвращается имя представления, а не имена базовых таблиц, если описываются столбцы из представления в результирующем наборе.
В представлении, созданном с предложением WITH VIEW_METADATA, все столбцы, за исключением столбца timestamp, поддерживают обновление, если представление включает триггеры INSTEAD OF INSERT или INSTEAD OF UPDATE. Дополнительные сведения об обновляемых представлениях см. в разделе «Примечания».
Замечания
Представление может быть создано только в текущей базе данных. Представление может включать не более 1 024 столбцов.
При выполнении запросов через представление компонент Database Engine проверяет, существуют ли все указанные в инструкции объекты базы данных, верны ли они в контексте инструкции и соответствуют ли инструкции модификации данных правилам обеспечения целостности данных. Если проверка завершается ошибкой, возвращается сообщение об ошибке. При успешной проверке операция преобразуется в операцию над базовой таблицей или таблицами.
Если представление зависит от удаленной таблицы или представления, компонент Database Engine в ответ на попытку использования представления возвращает сообщение об ошибке. Если создана новая таблица или представление, а структура таблицы не изменилась по сравнению с предыдущей базовой таблицей для замены удаленной, то представление можно использовать снова. Если структура новой таблицы или представления отличается от предыдущей, представление нужно удалить и создать заново.
Если представление создано без применения предложения SCHEMABINDING, то при изменении объектов, влияющих на определение представления, необходимо выполнять хранимую процедуру sp_refreshview. В противном случае результат запроса представления может быть непредвиденным.
При создании представления сведения о нем сохраняются в следующих представлениях каталога: sys.views, sys.columns и sys.sql_dependencies. Текст инструкции CREATE VIEW сохраняется в представлении каталога sys.sql_modules.
Запрос, в котором используется индекс представления, определенного с выражением типа numeric или float, может привести к получению результатов, отличных от результатов подобного запроса, в котором не используется индекс представления. Это отличие может быть обусловлено ошибками округления при выполнении запросов INSERT, DELETE или UPDATE для базовых таблиц.
При создании представления компонент Database Engine сохраняет значения SET QUOTED_IDENTIFIER и SET ANSI_NULLS. Эти исходные значения используются для синтаксического анализа данных представления при обращениях к нему. Таким образом, при доступе к представлению какие-либо заданные во время клиентского сеанса значения SET QUOTED_IDENTIFIER и SET ANSI_NULLS не влияют на определение представления.
Примечание. |
---|
Значение уровня совместимости определяет, как компонент Database Engine будет интерпретировать пустую строку: как одиночный пробел или как настоящую пустую строку. Если уровень совместимости не превышает 65, компонент Database Engine интерпретирует пустые строки как одиночные пробелы. Если уровень совместимости больше или равен 70, компонент Database Engine интерпретирует пустые строки как пустые строки. Дополнительные сведения см. в разделе sp_dbcmptlevel (Transact-SQL). |
Обновляемые представления
Можно изменять данные базовой таблицы через представление до тех пор, пока выполняются следующие условия:
- Любые изменения, в том числе инструкции UPDATE, INSERT и DELETE, должны ссылаться на столбцы только одной базовой таблицы.
- Изменяемые в представлении столбцы должны непосредственно ссылаться на данные столбцов базовой таблицы. Столбцы нельзя сформировать каким-либо другим образом, в том числе:
- при помощи статистической функции: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и VARP;
- на основе вычисления. Столбец нельзя вычислить по выражению, включающему другие столбцы. Столбцы, сформированные при помощи операторов UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT, считаются вычисляемыми и также не являются обновляемыми.
- Предложения GROUP BY, HAVING и DISTINCT не влияют на изменяемые столбцы.
- Предложение TOP не используется нигде в инструкции select_statement представления вместе с предложением WITH CHECK OPTION.
Вышеназванные ограничения относятся ко всем подзапросам представления в предложении FROM, равно как и к самому представлению. Как правило, компонент Database Engine должен иметь возможность однозначно проследить изменения от определения представления до одной базовой таблицы. Дополнительные сведения см. в разделе Изменение данных через представление.
Если вышеуказанные ограничения не позволяют изменить данные через представление напрямую, рассмотрите следующие варианты.
- Триггеры INSTEAD OF
Чтобы сделать представление обновляемым, для него можно создать триггеры INSTEAD OF. Триггер INSTEAD OF выполняется вместо инструкции модификации данных, для которой он определен. Этот триггер позволяет пользователю указать набор действий, которые должны быть выполнены для обработки инструкции модификации данных. Таким образом, если для представления создан триггер INSTEAD OF, связанный с конкретной инструкцией модификации данных (INSERT, UPDATE или DELETE), соответствующее представление можно обновлять при помощи этой инструкции. Дополнительные подробности о триггерах INSTEAD OF см. в разделе Конструирование триггеров INSTEAD OF. - Секционированные представления
Секционированное представление является в то же время и обновляемым, но при этом действуют некоторые ограничения. При необходимости компонент Database Engine проводит различие между локальными и распределенными секционированными представлениями. Первый тип включает представления, которые вместе со всеми соответствующими таблицами относятся к одному экземпляру SQL Server, а второй — представления, в которых хотя бы одна из таблиц относится к другому или удаленному серверу.
Дополнительные сведения о секционированных представлениях см. в разделе Создание секционированных представлений.
Секционированные представления
Секционированное представление — это представление, определенное посредством объединения всех (UNION ALL) таблиц-элементов, структурированных одинаковым образом, но хранимых отдельно в форме разных таблиц либо в одном экземпляре SQL Server, либо в группе автономных экземпляров SQL Server, которые называются федеративными серверами баз данных.
Примечание. |
---|
Предпочтительным способом локального секционирования данных на одном сервере является применение секционируемых таблиц. Дополнительные сведения см. в разделе Секционированные таблицы и индексы. |
При разработке схемы секционирования должно быть ясно, какие данные относятся к каждой секции. Например, данные таблицы Customers
распределены между тремя таблицами-элементами на трех серверах: таблицей Customers_33
(Server1
), таблицей Customers_66
(Server2
) и таблицей Customers_99
(Server3
).
Секционированное представление на сервере Server1
определяется следующим образом.
--Partitioned view as defined on Server1
CREATE VIEW Customers
AS
--Select from local member table.
SELECT *
FROM CompanyData.dbo.Customers_33
UNION ALL
--Select from member table on Server2.
SELECT *
FROM Server2.CompanyData.dbo.Customers_66
UNION ALL
--Select from mmeber table on Server3.
SELECT *
FROM Server3.CompanyData.dbo.Customers_99
Как правило, представление считают секционированным, если оно соответствует следующему формату:
SELECT <select_list1>
FROM T1
UNION ALL
SELECT <select_list2>
FROM T2
UNION ALL
...
SELECT <select_listn>
FROM Tn
Требования к созданию секционированных представлений
Список
выборки.В списке столбцов определения представления должны быть выбраны все столбцы таблиц-элементов.
Столбцы, занимающие одну и ту же порядковую позицию в каждом
списке выбора
, должны иметь одинаковый тип, включая параметры сортировки. Типы столбцов не просто должны поддерживать неявное преобразование друг в друга: в отличие от оператора UNION в данном случае этого недостаточно.
Кроме того, хотя бы один столбец (например,<col>
) должен входить во все списки выбора в одной и той же порядковой позиции. Этот столбец<col>
должен быть определен таким образом, чтобы для таблиц-элементовT1, ..., Tn
на столбце<col>
были определены ограничения CHECK с идентификаторамиC1, ..., Cn
соответственно.
ОграничениеC1
, определенное для таблицыT1
, должно иметь следующий формат:C1 ::= < simple_interval > [ OR < simple_interval > OR ...] < simple_interval > :: = < col > { < | > | <= | >= | = < value >} | < col > BETWEEN < value1 > AND < value2 > | < col > IN ( value_list ) | < col > { > | >= } < value1 > AND < col > { < | <= } < value2 >
Ограничения должны быть такими, чтобы любое указанное значение
<col>
могло удовлетворять не более чем одному из ограниченийC1, ..., Cn
, т. е. они должны формировать совокупность неперекрывающихся интервалов. Столбец<col>
, для которого определены неперекрывающиеся ограничения, называется столбцом секционирования. Обратите внимание, что столбец секционирования может иметь другие имена в базовых таблицах. Чтобы ограничения соответствовали вышеуказанным требованиям столбца секционирования, они должны находиться во включенном и доверенном состоянии. Если ограничения отключены, включите проверку ограничений с помощью параметра CHECK CONSTRAINT constraint_name инструкции ALTER TABLE и проверьте их с использованием параметра WITH CHECK.
В следующем фрагменте продемонстрированы правильные наборы ограничений:{ [col < 10], [col between 11 and 20] , [col > 20] } { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }
Один столбец не может быть указан в списке выбора несколько раз.
- Столбец секционирования.
- Столбец секционирования является частью первичного ключа (PRIMARY KEY) таблицы.
- Он не может быть вычисляемым столбцом, столбцом идентификаторов, столбцом по умолчанию и столбцом временных меток (типа timestamp).
- Если для одного столбца таблицы-элемента определено более одного ограничения, ядро СУБД пропускает все ограничения и не учитывает их при определении того, является ли представление секционированным. Чтобы соответствовать требованиям к секционированному представлению, со столбцом секционирования должно быть связано только одно ограничение секционирования.
- Ограничения для обновления столбца секционирования отсутствуют.
- Таблицы-элементы или базовые таблицы
T1, ..., Tn
.- Эти таблицы могут быть или локальными таблицами, или таблицами с других компьютеров, на которых выполняется SQL Server. Во втором случае для ссылки на таблицу должно быть использовано или четырехкомпонентное имя, или имя в формате функции OPENDATASOURCE или OPENROWSET. Синтаксис функций OPENDATASOURCE и OPENROWSET позволяет указать имя таблицы, но не передаваемого запроса. Дополнительные сведения см. в разделах OPENDATASOURCE (Transact-SQL) и OPENROWSET (Transact-SQL).
Если хотя бы одна таблица-элемент является удаленной, представление называется распределенным секционированным представлением, и тогда вступают в силу дополнительные требования. Они описаны ниже в данном разделе. - Одна таблица не может быть указана два раза в наборе таблиц, объединяемых при помощи инструкции UNION ALL.
- Таблицы-элементы не могут иметь индексы, созданные для вычисляемых столбцов в таблице.
- Все ограничения первичного ключа (PRIMARY KEY), действующие в таблицах-элементах, должны быть связаны с одинаковым количеством столбцов.
- Всем таблицам-элементам в представлении должно быть назначено одинаковое значение заполнения ANSI. Его можно задать либо при помощи аргумента user options процедуры sp_configure, либо при помощи инструкции SET.
- Эти таблицы могут быть или локальными таблицами, или таблицами с других компьютеров, на которых выполняется SQL Server. Во втором случае для ссылки на таблицу должно быть использовано или четырехкомпонентное имя, или имя в формате функции OPENDATASOURCE или OPENROWSET. Синтаксис функций OPENDATASOURCE и OPENROWSET позволяет указать имя таблицы, но не передаваемого запроса. Дополнительные сведения см. в разделах OPENDATASOURCE (Transact-SQL) и OPENROWSET (Transact-SQL).
Условия изменения данных в секционированных представлениях
На инструкции, изменяющие данные в секционированных представлениях, распространяются следующие ограничения.
- В инструкции INSERT должны быть указаны значения для всех столбцов представления, даже если в базовых таблицах-элементах действует ограничение DEFAULT для этих столбцов или они поддерживают значения NULL. Для тех столбцов таблиц-элементов, которые имеют определения DEFAULT, в инструкциях нельзя явно использовать ключевое слово DEFAULT.
- Значение, вставляемое в столбец секционирования, должно отвечать хотя бы одному из базовых ограничений; в противном случае операция вставки завершится ошибкой из-за нарушения ограничений.
- В предложении SET инструкции UPDATE в качестве значения не может быть указано ключевое слово DEFAULT, даже если столбец имеет значение DEFAULT, определенное в соответствующей таблице-элементе.
- Столбцы PRIMARY KEY не могут быть изменены при помощи инструкции UPDATE, если таблицы-элементы включают столбцы типов text, ntext или image.
- Столбец представления, который является столбцом идентификаторов в одной или нескольких таблицах-элементах, не может быть изменен при помощи инструкции INSERT или UPDATE.
- Если одна из таблиц-элементов содержит столбец timestamp, представление не может быть изменено при помощи инструкции INSERT или UPDATE.
- Если одна из таблиц-элементов содержит триггер, ограничение ON UPDATE CASCADE/SET NULL/SET DEFAULT или ограничение ON DELETE CASCADE/SET NULL/SET DEFAULT, то данные нельзя изменить.
- Выполнение операций INSERT, UPDATE и DELETE для секционированного представления не допускается, если осуществляется самосоединение с тем же представлением или с какой-либо из таблиц-элементов, указанных в инструкции.
- Массовый импорт данных в секционированное представление не поддерживается программой bcp или инструкциями BULK INSERT и INSERT ... SELECT * FROM OPENROWSET(BULK...) не поддерживают массовый импорт в секционированное представление. Однако можно вставить в секционированное представление несколько строк с помощью инструкции INSERT. Дополнительные сведения см. в разделе Массовый экспорт данных из представления или массовый импорт данных в него.
Примечание. Для обновления секционированного представления пользователь должен иметь связанные с таблицами-элементами разрешения INSERT, UPDATE и DELETE.
Дополнительные требования, предъявляемые к распределенным секционированным представлениям
При работе с распределенными секционированными представлениями (если одна или несколько таблиц-элементов являются удаленными) действуют следующие дополнительные требования.
- Для обеспечения атомарности операций на всех узлах, затрагиваемых операцией обновления, запускается распределенная транзакция.
- Чтобы инструкции INSERT, UPDATE и DELETE были выполнены успешно, параметр XACT_ABORT SET должен иметь значение ON.
- Любые столбцы типов smallmoney и smalldatetime в удаленных таблицах, фигурирующих в секционированном представлении, сопоставляются с типами money и datetime соответственно. Таким образом, соответствующие им столбцы локальных таблиц (столбцы, занимающие те же порядковые позиции в списке выбора) должны иметь типы money и datetime.
- Никакой связанный сервер в секционированном представлении не может быть замкнут на себя. Иными словами, связанный сервер не может указывать на тот же экземпляр SQL Server.
При выполнении операций INSERT, UPDATE и DELETE, в которых задействованы обновляемые секционированные представления и удаленные таблицы, параметр SET ROWCOUNT не учитывается.
При наличии таблиц-элементов и определения секционированного представления оптимизатор запросов SQL Server 2005 составляет планы эффективного выполнения запросов для доступа к данным из таблиц-элементов. При наличии определений ограничения CHECK обработчик запросов составляет карту распределения значений ключей по таблицам-элементам. Когда пользователь выполняет запрос, обработчик запросов сравнивает карту со значениями, указанными в предложении WHERE, и создает план выполнения, позволяющий свести к минимуму объем передачи данных между серверами-элементами. Следовательно, несмотря на то что некоторые таблицы-элементы могут храниться на удаленных серверах, экземпляр SQL Server 2005 разрешает распределенные запросы таким образом, чтобы объем передаваемых распределенных данных оказался минимальным. Дополнительные сведения о том, как SQL Server 2005 разрешает запросы к секционированным представлениям, см. в разделе Разрешение распределенных секционированных представлений.
Аспекты, связанные с репликацией
При создании секционированных представлений для таблиц-элементов, задействованных в репликации, следует учитывать следующие факторы.
- Если базовые таблицы задействованы в репликации слиянием или репликации транзакций с обновляемыми подписками, в список выбора должен быть включен столбец uniqueidentifier.
При выполнении любых операций INSERT в секционированном представлении необходимо предоставлять значение NEWID() для столбца uniqueidentifier. При выполнении любых операций UPDATE для столбца uniqueidentifier необходимо предоставлять значение NEWID(), так как ключевое слово DEFAULT использовать при этом нельзя. - Репликация обновлений, выполненных при помощи представления, не отличается от репликации таблиц в двух разных базах данных: таблицы обрабатываются разными агентами репликации, а порядок обновлений не гарантируется.
Разрешения
Необходимо разрешение CREATE VIEW в базе данных и разрешение ALTER на схему, в которой создается представление.
Примеры
А. Использование простой инструкции CREATE VIEW
В следующем фрагменте представление создается при помощи простой инструкции SELECT
. Это полезно, если нужно часто выполнять запросы с сочетанием столбцов. Данные этого представления извлекаются из таблиц HumanResources.Employee
и Person.Contact
базы данных AdventureWorks
. Эти данные включают имена и фамилии сотрудников Adventure Works Cycles, а также даты их приема на работу. Такое представление можно было бы создать, например для человека, следящего за профессиональными юбилеями, при этом не предоставляя ему доступ ко всем данным, хранящимся в этих таблицах.
USE AdventureWorks ;
GO
IF OBJECT_ID ('hiredate_view', 'V') IS NOT NULL
DROP VIEW hiredate_view ;
GO
CREATE VIEW hiredate_view
AS
SELECT c.FirstName, c.LastName, e.EmployeeID, e.HireDate
FROM HumanResources.Employee e JOIN Person.Contact c on e.ContactID = c.ContactID ;
GO
Б. Использование параметра WITH ENCRYPTION
Следующий пример поясняет применение параметра WITH ENCRYPTION
и обращение к вычисляемым, переименованным и множественным столбцам.
USE AdventureWorks ;
GO
IF OBJECT_ID ('Purchasing.PurchaseOrderReject', 'V') IS NOT NULL
DROP VIEW Purchasing.PurchaseOrderReject ;
GO
CREATE VIEW Purchasing.PurchaseOrderReject
WITH ENCRYPTION
AS
SELECT PurchaseOrderID, ReceivedQty, RejectedQty,
RejectedQty / ReceivedQty AS RejectRatio, DueDate
FROM Purchasing.PurchaseOrderDetail
WHERE RejectedQty / ReceivedQty > 0
AND DueDate > CONVERT(DATETIME,'20010630',101) ;
GO
В. Использование предложения WITH CHECK OPTION
В следующем примере создается представление SeattleOnly
, ссылающееся на пять таблиц и допускающее изменение данных только тех сотрудников, которые живут в Сиэтле.
USE AdventureWorks ;
GO
IF OBJECT_ID ('dbo.SeattleOnly', 'V') IS NOT NULL
DROP VIEW dbo.SeattleOnly ;
GO
CREATE VIEW dbo.SeattleOnly
AS
SELECT c.LastName, c.FirstName, a.City, s.StateProvinceCode
FROM Person.Contact AS c
JOIN HumanResources.Employee AS e ON c.ContactID = e.ContactID
JOIN HumanResources.EmployeeAddress AS ea ON e.EmployeeID = ea.EmployeeID
JOIN Person.Address AS a ON ea.AddressID = a.AddressID
JOIN Person.StateProvince AS s ON a.StateProvinceID = s.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
Г. Использование встроенных функций в представлении
В следующем фрагменте показано определение представления, включающее встроенную функцию. Применяя функцию, следует указывать имя производного столбца.
USE AdventureWorks ;
GO
IF OBJECT_ID ('Sales.SalesPersonPerform', 'V') IS NOT NULL
DROP VIEW Sales.SalesPersonPerform ;
GO
CREATE VIEW Sales.SalesPersonPerform
AS
SELECT TOP 100 SalesPersonID, SUM(TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader
WHERE OrderDate > CONVERT(DATETIME,'20001231',101)
GROUP BY SalesPersonID;
GO
Д. Использование секционированных данных
В следующем примере используются таблицы SUPPLY1
, SUPPLY2
, SUPPLY3
и SUPPLY4
. Они соответствуют таблицам поставщиков из четырех офисов, расположенных в разных странах и регионах.
--Create the tables and insert the values.
CREATE TABLE dbo.SUPPLY1 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 1 and 150),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY2 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 151 and 300),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY3 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 301 and 450),
supplier CHAR(50)
);
CREATE TABLE dbo.SUPPLY4 (
supplyID INT PRIMARY KEY CHECK (supplyID BETWEEN 451 and 600),
supplier CHAR(50)
);
GO
INSERT dbo.SUPPLY1 VALUES ('1', 'CaliforniaCorp');
INSERT dbo.SUPPLY1 VALUES ('5', 'BraziliaLtd');
INSERT dbo.SUPPLY2 VALUES ('231', 'FarEast');
INSERT dbo.SUPPLY2 VALUES ('280', 'NZ');
INSERT dbo.SUPPLY3 VALUES ('321', 'EuroGroup');
INSERT dbo.SUPPLY3 VALUES ('442', 'UKArchip');
INSERT dbo.SUPPLY4 VALUES ('475', 'India');
INSERT dbo.SUPPLY4 VALUES ('521', 'Afrique');
GO
--Create the view that combines all supplier tables.
CREATE VIEW all_supplier_view
WITH SCHEMABINDING
AS
SELECT supplyID, supplier
FROM dbo.SUPPLY1
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY2
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY3
UNION ALL
SELECT supplyID, supplier
FROM dbo.SUPPLY4;
См. также
Справочник
ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL)
DELETE (Transact-SQL)
DROP VIEW (Transact-SQL)
INSERT (Transact-SQL)
sp_depends (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_refreshview (Transact-SQL)
sp_rename (Transact-SQL)
sys.views (Transact-SQL)
UPDATE (Transact-SQL)
EVENTDATA (Transact-SQL)
Другие ресурсы
Создание хранимых процедур (компонент Database Engine)
Использование идентификаторов в качестве имен объектов
Использование секционированных представлений
Разрешение представлений
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
17 ноября 2008 г. |
|
17 июля 2006 г. |
|
14 апреля 2006 г. |
|
5 декабря 2005 г. |
|