Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
конечной точке аналитики платформы Аналитики Azure Synapse Analytics
(PDW)
в Microsoft Fabric
Хранилище в базе данных Microsoft Fabric
SQL в Microsoft Fabric
Создает виртуальную таблицу, содержимое которой (столбцы и строки) определяется запросом. Используйте эту инструкцию для создания представления данных, содержащихся в одной или более таблицах базы данных. Например, представление можно использовать в следующих целях.
Для направления, упрощения и настройки восприятия информации в базе данных каждым пользователем.
В качестве механизма безопасности, позволяющего пользователям обращаться к данным через представления, но не предоставляя им разрешений на непосредственный доступ к базовым таблицам.
Для предоставления интерфейса обратной совместимости, моделирующего таблицу, схема которой изменилась.
Соглашения о синтаксисе Transact-SQL
Синтаксис
Синтаксис ДЛЯ SQL Server и База данных SQL Azure.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ]
AS select_statement
[ WITH CHECK OPTION ]
[ ; ]
<view_attribute> ::=
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]
}
Синтаксис для Azure Synapse Analytics и параллельного хранилища данных.
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Синтаксис для хранилища данных Microsoft Fabric и конечной точки аналитики SQL.
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
[ WITH <view_attribute> [ ,...n ] ] AS <select_statement>
[;]
<view_attribute> ::=
{
[ SCHEMABINDING ]
}
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Аргументы
OR ALTER
Область применения: База данных SQL Azure и SQL Server (начиная с SQL Server 2016 (13.x) с пакетом обновления 1 (SP1).
Условно изменяет представление только в том случае, если оно уже существует.
schema_name
Имя схемы, которой принадлежит представление.
view_name
Имя представления. Имена представлений должны соответствовать требованиям, предъявляемым к идентификаторам. Указывать имя владельца представления не обязательно.
column
Имя, которое будет иметь столбец в представлении. Имя столбца требуется только в том случае, если столбец является производным от арифметического выражения, функции или константы; Если два или более столбца могут иметь одинаковое имя, как правило, из-за соединения; или когда столбец в представлении указывается имя, отличное от имени столбца, от которого он является производным. Имена столбцов также можно назначить в инструкции SELECT
.
Если столбец не указан, столбцы представления получают те же имена, что и столбцы в инструкции SELECT
.
Примечание.
В столбцах представления разрешения для имени столбца применяются в пределах CREATE VIEW
или ALTER VIEW
инструкции независимо от источника базовых данных. Например, если разрешения предоставляются в SalesOrderID
столбце в инструкции CREATE VIEW, ALTER VIEW
инструкция может присвоить SalesOrderID
столбцу другое имя столбца, например OrderRef
и иметь разрешения, связанные с представлением.SalesOrderID
AS
Определяет действия, которые должны быть выполнены в представлении.
select_statement
Инструкция SELECT
, определяющая представление. В этой инструкции можно указывать более одной таблицы и другие представления. Необходимые разрешения необходимы для выбора из объектов, на которые SELECT
ссылается предложение созданного представления.
Представление не должно быть подмножеством строк и столбцов одной конкретной таблицы. Представление можно создать, использующее несколько таблиц или других представлений с предложением SELECT
любой сложности.
В определении SELECT
индексированного представления оператор должен быть одной инструкцией таблицы или многотабельной JOIN
с необязательным агрегированием.
Предложения SELECT
в определении представления не могут включать:
Предложение
ORDER BY
, если не существуетTOP
предложения в списке выбора инструкцииSELECT
Внимание
Предложение
ORDER BY
используется только для определения строк, возвращаемыхTOP
в определении представления илиOFFSET
предложения. ПредложениеORDER BY
не гарантирует упорядоченные результаты при запросе представления, еслиORDER BY
не указано в самом запросе.Ключевое слово
INTO
Предложение
OPTION
ссылку на временную таблицу или табличную переменную.
Так как select_statement использует инструкцию SELECT
, это допустимо для использования подсказок соединения и табличных подсказок, указанных в предложении FROM
. Дополнительные сведения см. в разделе FROM (Transact-SQL) и SELECT (Transact-SQL).
Функции и несколько SELECT
инструкций, UNION
разделенных или UNION ALL
могут использоваться в select_statement.
CHECK OPTION
Обеспечивает соответствие всех выполняемых для представления инструкций, изменяющих данные, критериям, заданным в выражении select_statement. При изменении строки с помощью представления данные остаются видимыми через представление WITH CHECK OPTION
после фиксации изменения.
Примечание.
Применяется CHECK OPTION
только к обновлениям, сделанным через представление. Он неприменим к обновлениям, выполненным непосредственно в базовых таблицах представления.
ШИФРОВАНИЕ
Область применения: SQL Server 2008 (10.0.x) и более поздних версий и База данных SQL Azure.
Шифрует записи в sys.syscomments , содержащие текст инструкции CREATE VIEW
. Использование WITH ENCRYPTION
предотвращает публикацию представления в рамках репликации SQL Server.
SCHEMABINDING
Привязывает представление к схеме базовой таблицы или таблиц. Если SCHEMABINDING
задано, базовая таблица или таблицы не могут быть изменены таким образом, чтобы повлиять на определение представления. Сначала нужно изменить или удалить само представление для сброса зависимостей от таблицы, которую требуется изменить. При использовании SCHEMABINDING
select_statement должны включать имена двух частей (схема).объект) таблиц, представлений или определяемых пользователем функций, на которые ссылается ссылка. Все указанные в инструкции объекты должны находиться в одной базе данных.
Представления или таблицы, входящие в представление, созданное при помощи предложения SCHEMABINDING, не могут быть сброшены, пока это представление не будет удалено или изменено таким образом, чтобы оно более не было привязано к схеме. В противном случае ядро СУБД вызывает ошибку. Кроме того, выполнение ALTER TABLE
инструкций в таблицах, участвующих в представлениях с привязкой схемы, завершается ошибкой, когда эти инструкции влияют на определение представления.
VIEW_METADATA
Указывает, что экземпляр SQL Server вернется в БИБЛИОТЕКу DB, ODBC и OLE DB API метаданных представления, а не базовую таблицу или таблицы, при запросе метаданных в режиме обзора для запроса, ссылающегося на представление. Метаданные в режиме обзора — это дополнительные метаданные, возвращаемые экземпляром SQL Server в эти клиентские API. Эти метаданные позволяют клиентским API-интерфейсам реализовывать обновляемые клиентские курсоры. Метаданные режима обзора содержат сведения о базовой таблице, которой принадлежат столбцы в результирующем наборе.
Для представлений, созданных с VIEW_METADATA
помощью метаданных режима обзора, возвращается имя представления, а не базовые имена таблиц при описании столбцов из представления в результирующем наборе.
Если представление создается с помощью , WITH VIEW_METADATA
все его столбцы, кроме столбца метки времени , обновляются, если представление имеет INSTEAD OF INSERT
или INSTEAD OF UPDATE
активирует. Дополнительные сведения об обновляемых представлениях см. в разделе «Примечания».
Замечания
Представление может быть создано только в текущей базе данных. Должен CREATE VIEW
быть первым оператором в пакете запросов. Представление может включать не более 1 024 столбцов.
При запросе через представление ядро СУБД проверяет наличие всех объектов базы данных, на которые ссылается инструкция, и что они действительны в контексте инструкции, и что инструкции изменения данных не нарушают правила целостности данных. Если проверка завершается ошибкой, возвращается сообщение об ошибке. При успешной проверке операция преобразуется в операцию над базовой таблицей или таблицами.
Если представление зависит от таблицы или представления, которое было удалено, ядро СУБД создает сообщение об ошибке, когда любой пользователь пытается использовать представление. Если создана новая таблица или представление, а структура таблицы не изменилась по сравнению с предыдущей базовой таблицей для замены удаленной, то представление можно использовать снова. Если структура новой таблицы или представления отличается от предыдущей, представление нужно удалить и создать заново.
Если представление не создается с SCHEMABINDING
предложением, запустите sp_refreshview при внесении изменений в объекты, которые влияют на определение представления. В противном случае результат запроса представления может быть непредвиденным.
При создании представления сведения о нем сохраняются в следующих представлениях каталога: sys.views, sys.columns и sys.sql_expression_dependencies. Текст инструкции CREATE VIEW
хранится в представлении каталога sys.sql_modules .
Запрос, использующий индекс для представления, определенного с числовыми или плавающими выражениями, может иметь результат, отличный от аналогичного запроса, который не использует индекс в представлении. Это различие может быть вызвано округлением ошибок во время INSERT
, DELETE
или UPDATE
действий в базовых таблицах.
Ядро СУБД сохраняет параметры SET QUOTED_IDENTIFIER
и SET ANSI_NULLS
при создании представления. Эти исходные значения используются для синтаксического анализа данных представления при обращениях к нему. Поэтому все параметры сеанса клиента и SET QUOTED_IDENTIFIER
SET ANSI_NULLS
не влияют на определение представления при доступе к представлению.
В Azure Synapse Analytics представления не поддерживают привязку схемы. Таким образом, если изменения вносятся в базовые объекты, необходимо удалить и повторно создать представление для обновления базовых метаданных. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.
В Azure Synapse Analytics обновляемые представления, триггеры DML (типа AFTER
или INSTEAD OF
) и секционированные представления не поддерживаются. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.
В Azure Synapse Analytics секционированные представления не поддерживаются. Дополнительные сведения см. в статье Представления T-SQL с выделенным пулом SQL и бессерверным пулом SQL в Azure Synapse Analytics.
В базе данных SQL Fabric можно создавать представления, но они не отражаются в Fabric OneLake. Дополнительные сведения см. в разделе "Ограничения зеркального отображения базы данных SQL Fabric".
Обновляемые представления
Можно изменять данные базовой таблицы через представление до тех пор, пока выполняются следующие условия:
Любые изменения, включая
UPDATE
INSERT
операторы иDELETE
инструкции, должны ссылаться на столбцы только из одной базовой таблицы.Изменяемые в представлении столбцы должны непосредственно ссылаться на данные столбцов базовой таблицы. Столбцы нельзя сформировать каким-либо другим образом, в том числе:
Агрегатная функция:
AVG
,COUNT
,SUM
GROUPING
STDEV
MAX
MIN
, ,STDEVP
,VAR
и .VARP
на основе вычисления. Столбец нельзя вычислить по выражению, включающему другие столбцы. Столбцы, сформированные при помощи операторов UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT, считаются вычисляемыми и также не являются обновляемыми.
Измененные столбцы не влияют на
GROUP BY
HAVING
предложения илиDISTINCT
предложения.TOP не используется нигде в select_statement представления вместе с предложением
WITH CHECK OPTION
.
Вышеназванные ограничения относятся ко всем подзапросам представления в предложении FROM, равно как и к самому представлению. Как правило, ядро СУБД должны иметь возможность однозначно отслеживать изменения из определения представления в одну базовую таблицу. Дополнительные сведения см. в разделе Изменение данных через представление.
Если вышеуказанные ограничения не позволяют изменить данные через представление напрямую, рассмотрите следующие варианты.
Триггеры INSTEAD OF
INSTEAD OF
триггеры можно создать в представлении, чтобы сделать представление обновляемым.INSTEAD OF
Триггер выполняется вместо инструкции изменения данных, в которой определен триггер. Этот триггер позволяет пользователю указать набор действий, которые должны быть выполнены для обработки инструкции модификации данных. Таким образом, еслиINSTEAD OF
триггер существует для представления для определенного оператора изменения данных (INSERT
илиUPDATE
DELETE
), соответствующее представление обновляется с помощью этой инструкции. Дополнительные сведения об триггерах см. вINSTEAD OF
разделе "Триггеры DML".Секционированные представления
Секционированное представление является в то же время и обновляемым, но при этом действуют некоторые ограничения. При необходимости ядро СУБД различает локальные секционированные представления как представления, в которых все участвующие таблицы и представление находятся в одном экземпляре SQL Server, а распределенные секционированные представления — представления, в которых по крайней мере одна из таблиц в представлении находится на другом или удаленном сервере.
Секционированные представления
Секционированное представление — это представление, определенное UNION ALL
таблицами-членами, структурированными таким же образом, но хранится отдельно в нескольких таблицах в одном экземпляре SQL Server или в группе автономных экземпляров серверов SQL Server, называемых федеративными серверами баз данных.
Примечание.
Предпочтительным способом локального секционирования данных на один сервер является применение секционированных таблиц. Дополнительные сведения см. в разделе Partitioned Tables and Indexes.
При разработке схемы секционирования необходимо четко определить, какие данные относятся к каждой секции. Например, данные таблицы 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 member 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;
Условия создания секционированных представлений
list
выборки.В списке столбцов определения представления выберите все столбцы таблиц-элементов.
Столбцы, занимающие одну и ту же порядковую позицию в каждом
select list
, должны иметь одинаковый тип, включая параметры сортировки. Для столбцов неявно преобразуемых типов недостаточно, как правило, дляUNION
.Кроме того, хотя бы один столбец (например,
<col>
) должен входить во все списки выбора в одной и той же порядковой позиции. Определите столбец<col>
таким образом, чтобы для таблиц-элементовT1, ..., Tn
в столбцеC1, ..., Cn
были определены ограничения CHECK с идентификаторами<col>
соответственно.Ограничение
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. Это можно задать с помощью параметра параметров пользователя или
sp_configure
инструкции SET.
Условия изменения данных в секционированных представлениях
На инструкции, изменяющие секционированные представления, распространяются следующие ограничения:
Оператор
INSERT
предоставляет значения для всех столбцов в представлении, даже если базовые таблицы элементов имеютDEFAULT
ограничение для этих столбцов или если они допускаютNULL
значения. Для этих столбцов таблицы-членов, имеющихDEFAULT
определения, операторы не могут явно использовать ключевое словоDEFAULT
.Значение, вставленное в столбец секционирования, удовлетворяет по крайней мере одному из базовых ограничений; В противном случае действие вставки завершается ошибкой с нарушением ограничения.
UPDATE
операторы не могут указатьDEFAULT
ключевое слово в качестве значения вSET
предложении, даже если столбец имеетDEFAULT
значение, определенное в соответствующей таблице элементов.Столбцы в представлении, которые являются столбцом удостоверений в одной или нескольких таблицах элементов, нельзя изменять с помощью инструкции или
UPDATE
инструкцииINSERT
.Если одна из таблиц-членов содержит столбец метки времени, данные нельзя изменить с помощью инструкции или
UPDATE
инструкцииINSERT
.Если одна из таблиц-членов содержит триггер или
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
разрешения на таблицы-члены.
Дополнительные условия для распределенных секционированных представлений
При работе с распределенными секционированными представлениями (если одна или несколько таблиц-элементов являются удаленными) действуют следующие дополнительные требования.
Распределенная транзакция запускается для обеспечения атомарности на всех узлах, затронутых обновлением.
XACT_ABORT
SET
Задайте дляINSERT
ON
параметра значение ,UPDATE
илиDELETE
операторы, которые будут работать.Любые столбцы удаленных таблиц типа smallmoney, фигурирующих в секционированном представлении, сопоставляются как тип money. Таким образом, соответствующие им столбцы локальных таблиц (столбцы, занимающие те же порядковые позиции в списке выбора) должны также иметь тип money.
При уровне совместимости базы данных 110 и выше любые столбцы типа smalldatetime в удаленных таблицах, фигурирующих в секционированном представлении, сопоставляются как тип smalldatetime. Соответствующие им столбцы локальных таблиц (столбцы, занимающие те же порядковые позиции в списке выбора) должны иметь тип smalldatetime. Это изменение поведения с предыдущих версий SQL Server, в которых любые столбцы в удаленных таблицах типа smalldatetime, на которые ссылается секционированное представление, сопоставляются как datetime и соответствующие столбцы в локальных таблицах должны иметь тип datetime. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).
Никакой связанный сервер в секционированном представлении не может быть замкнут на себя. Это связанный сервер, указывающий на тот же экземпляр SQL Server.
Параметр SET ROWCOUNT
игнорируется для INSERT
, UPDATE
а DELETE
действия, включающие обновляемые секционированные представления и удаленные таблицы.
Если существуют таблицы-члены и определение секционированного представления, оптимизатор запросов SQL Server создает интеллектуальные планы, которые эффективно используют запросы для доступа к данным из таблиц-членов.
CHECK
С определениями ограничений обработчик запросов сопоставляет распределение ключевых значений в таблицах элементов. Когда пользователь выдает запрос, обработчик запросов сравнивает сопоставление со значениями, указанными в WHERE
предложении, и создает план выполнения с минимальным объемом передачи данных между серверами-членами. Таким образом, если некоторые таблицы-члены находятся на удаленных серверах, экземпляр SQL Server разрешает распределенные запросы, чтобы объем передаваемых данных был минимальным.
Рекомендации по репликации
При создании секционированных представлений для таблиц-элементов, задействованных в репликации, следует учитывать следующие факторы.
Если базовые таблицы задействованы в репликации слиянием или репликации транзакций с обновляемыми подписками, в список выбора должен быть включен столбец uniqueidentifier.
Все
INSERT
действия в секционированного представления должны содержатьNEWID()
значение для столбца uniqueidentifier . Любые действия UPDATE в столбце uniqueidentifier должны быть указаноNEWID()
в качестве значения, так как ключевое слово DEFAULT нельзя использовать.Репликация обновлений, производимых при помощи представления, выполняется так же, как и при репликации таблиц в разных базах данных: таблицы обслуживаются различными агентами репликации, и определенный порядок выполнения обновлений не гарантируется.
Разрешения
Для выполнения этой инструкции требуется разрешение CREATE VIEW в отношении базы данных и разрешение ALTER в отношении схемы, в которой создается представление.
Примеры
В следующих примерах используется AdventureWorks2022
база данных или AdventureWorksDW2022
база данных.
А. Создание представления с помощью CREATE VIEW
В следующем примере создается представление с помощью инструкции SELECT
. Это полезно, если нужно часто выполнять запросы с сочетанием столбцов. Данные из этого представления поступают из HumanResources.Employee
Person.Person
базы данных AdventureWorks2022 и таблиц. Эти данные предоставляют сведения о дате и дате найма для сотрудников циклов Adventure Works. Такое представление можно было бы создать, например для человека, следящего за профессиональными юбилеями, при этом не предоставляя ему доступ ко всем данным, хранящимся в этих таблицах.
CREATE VIEW hiredate_view
AS
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate
FROM HumanResources.Employee AS e
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;
GO
B. Использование WITH ENCRYPTION
Следующий пример поясняет применение параметра WITH ENCRYPTION
и обращение к вычисляемым, переименованным и множественным столбцам.
Область применения: SQL Server 2008 (10.0.x) и более поздних версий и База данных SQL.
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
В следующем примере создается представление dbo.SeattleOnly
, ссылающееся на пять таблиц и допускающее изменение данных только тех сотрудников, которые живут в Сиэтле.
CREATE VIEW dbo.SeattleOnly
AS
SELECT p.LastName, p.FirstName, e.JobTitle, a.City, sp.StateProvinceCode
FROM HumanResources.Employee e
INNER JOIN Person.Person p
ON p.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.BusinessEntityAddress bea
ON bea.BusinessEntityID = e.BusinessEntityID
INNER JOIN Person.Address a
ON a.AddressID = bea.AddressID
INNER JOIN Person.StateProvince sp
ON sp.StateProvinceID = a.StateProvinceID
WHERE a.City = 'Seattle'
WITH CHECK OPTION ;
GO
D. Использование встроенных функций в представлении
В следующем фрагменте показано определение представления, включающее встроенную функцию. Применяя функцию, следует указывать имя производного столбца.
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
--Create the view that combines all supplier tables.
CREATE VIEW dbo.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;
GO
INSERT dbo.all_supplier_view VALUES ('1', 'CaliforniaCorp'), ('5', 'BraziliaLtd')
, ('231', 'FarEast'), ('280', 'NZ')
, ('321', 'EuroGroup'), ('442', 'UKArchip')
, ('475', 'India'), ('521', 'Afrique');
GO
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
F. Создание представления путем соединения двух таблиц
В следующем примере представление создается при помощи инструкции SELECT
с OUTER JOIN
. Результаты запроса на соединение заполняют представление.
CREATE VIEW view1
AS
SELECT fis.CustomerKey, fis.ProductKey, fis.OrderDateKey,
fis.SalesTerritoryKey, dst.SalesTerritoryRegion
FROM FactInternetSales AS fis
LEFT OUTER JOIN DimSalesTerritory AS dst
ON (fis.SalesTerritoryKey=dst.SalesTerritoryKey);
Связанный контент
- Инструкция ALTER TABLE (Transact-SQL)
- ALTER VIEW (Transact-SQL)
- DELETE (Transact-SQL)
- DROP VIEW (Transact-SQL)
- INSERT (Transact-SQL)
- Создание хранимой процедуры
- sys.dm_sql_referenced_entities (Transact-SQL)
- sys.dm_sql_referencing_entities (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)