適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric Warehouse
Microsoft Fabric SQL Database
クエリによって内容 (列と行) が定義される仮想テーブルを作成します。 このステートメントを使用して、データベースの 1 つまたは複数のテーブル内のデータのビューを作成します。 たとえば、ビューは次の目的で使用できます。
各ユーザーのデータベースに対する認識を特化、簡素化、およびカスタマイズする。
基になるベース テーブルに直接アクセスする権限をユーザーに与えずに、ユーザーがビューを介してデータにアクセスできるように設定することにより、セキュリティのメカニズムとして使用する。
テーブルのスキーマが変更された場合に、そのテーブルをエミュレートするための後方互換性インターフェイスを提供する。
構文
SQL Server および Azure SQL データベース の構文
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 と Parallel Data Warehouse の構文。
CREATE VIEW [ schema_name . ] view_name [ ( column_name [ ,...n ] ) ]
AS <select_statement>
[;]
<select_statement> ::=
[ WITH <common_table_expression> [ ,...n ] ]
SELECT <select_criteria>
Microsoft Fabric Data Warehouse と 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>
引数
または ALTER
適用対象: Azure SQL データベース および SQL Server (SQL Server 2016 (13.x) SP1 以降)。
ビューが既に存在する場合にのみ、条件付きでビューを変更します。
schema_name
ビューが所属するスキーマの名前を指定します。
view_name
ビューの名前です。 ビュー名は、識別子のルールに従っている必要があります。 ビューの所有者名の指定は省略可能です。
コラム
ビューの列に付ける名前を指定します。 列名は、列が算術式、関数、または定数から派生する場合にのみ必要です。2 つ以上の列が同じ名前を持つ可能性がある場合 (通常は結合が原因)。または、ビュー内の列が、派生元の列とは異なる名前を指定した場合。 列名は、 SELECT
ステートメントでも割り当てることができます。
列が指定されていない場合、ビュー列は、SELECT
ステートメントの列と同じ名前を取得します。
注
ビューの列では、基になるデータのソースに関係なく、列名のアクセス許可が CREATE VIEW
または ALTER VIEW
ステートメントに適用されます。 たとえば、CREATE VIEW ステートメントのSalesOrderID
列に対して権限が付与されている場合、ALTER VIEW
ステートメントでは、SalesOrderID
などの別の列名でOrderRef
列に名前を付け、SalesOrderID
を使用してビューに関連付けられた権限を持つことができます。
という形で
ビューが行う動作を指定します。
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_statementでは、SELECT
またはUNION
で区切られた関数および複数のUNION ALL
ステートメントを使用できます。
チェック オプション
ビューに対して実行されるすべてのデータ変更ステートメントについて、select_statement 内で設定される条件に従うよう強制します。 ビューを通じて行が変更されると、 WITH CHECK OPTION
により、変更がコミットされた後もビューを通じてデータが表示されたままになります。
注
CHECK OPTION
は、ビューを介して行われた更新にのみ適用されます。 ビューの基になるテーブルに対して直接実行された更新には適用されません。
暗号化
適用対象: SQL Server 2008 (10.0.x) 以降および Azure SQL Database。
ステートメントのテキストを含む CREATE VIEW
内のエントリを暗号化します。
WITH ENCRYPTION
を使用すると、ビューが SQL Server レプリケーションの一部として発行されなくなります。
SCHEMABINDING
基になるテーブルのスキーマにビューをバインドします。
SCHEMABINDING
を指定した場合、ビュー定義に影響を与える方法でベース テーブルまたはベース テーブルを変更することはできません。 まずビュー定義を変更または削除して、変更するテーブルとの依存関係を解消する必要があります。
SCHEMABINDING
を使用する場合、select_statementには 2 部構成の名前 (スキーマ) を含める必要があります。object)参照されるテーブル、ビュー、またはユーザー定義関数の数。 参照されるオブジェクトは、すべて同じデータベース内にあることが必要です。
SCHEMABINDING 句を指定して作成したビューに参加しているビューまたはテーブルは、そのビューが削除または変更されてスキーマ バインドがなくならない限り削除できません。 スキーマ バインドが残っている場合は、データベース エンジンからエラーが返されます。 また、これらのステートメントがビュー定義に影響を与えると、スキーマ バインドを持つビューに含まれるテーブルに対して ALTER TABLE
ステートメントを実行すると失敗します。
VIEW_METADATA
ビューを参照するクエリ用にブラウズ モード メタデータが要求されている場合、SQL Server インスタンスは、DB-Library、ODBC、および OLE DB API に対して、ベース テーブルではなくビューに関するメタデータ情報を返します。 ブラウズ モード メタデータは、SQL Server インスタンスからクライアント側 API に返される追加のメタデータです。 クライアント側 API ではこのメタデータによって、更新可能なクライアント側カーソルを実装できます。 ブラウズ モード メタデータには、結果セット内の列が属するベース テーブルの情報が含まれています。
VIEW_METADATA
を使用して作成されたビューの場合、参照モードのメタデータは、結果セット内のビューの列を記述するときに、ベース テーブル名ではなくビュー名を返します。
WITH VIEW_METADATA
を使用してビューを作成すると、ビューにまたはINSTEAD OF INSERT
トリガーがある場合、INSTEAD OF UPDATE
列を除くすべての列が更新できます。 更新可能なビューの詳細については、「解説」を参照してください。
解説
ビューは現在のデータベースでのみ作成できます。
CREATE VIEW
は、クエリ バッチの最初のステートメントである必要があります。 1 つのビューで保持できる列の数は最大 1,024 です。
ビューからクエリを実行すると、データベース エンジン では、ステートメントで参照されているデータベース オブジェクトがすべて存在すること、データベース オブジェクトがステートメントのコンテキストで有効であること、およびデータ変更ステートメントがデータの整合性規則に違反していないことが確認されます。 確認に失敗すると、エラー メッセージが返されます。 確認に成功すると、そのアクションが、基になるテーブルに対するアクションに変換されます。
削除されたテーブル (またはビュー) に従属しているビューを使用すると、データベース エンジン ではエラー メッセージが返されます。 テーブルの構造が以前のベース テーブルから変わっていなければ、削除されたテーブルやビューの代わりになる、新しいテーブルまたはビューを作成すると、ビューは再び使用可能になります。 新しいテーブルまたはビューの構造が変化した場合は、ビューを削除し、再作成する必要があります。
SCHEMABINDING
句を使用してビューが作成されない場合は、ビューの定義に影響するビューの基になるオブジェクトに変更が加えられたときに、sp_refreshview実行します。 それ以外の場合は、ビューのクエリ時に、予期しない結果が生成される可能性があります。
ビューが作成されると、ビューについての情報がカタログ ビュー sys.views、sys.columns、sys.sql_expression_dependencies に格納されます。
CREATE VIEW
ステートメントのテキストは、sys.sql_modules カタログ ビューに格納されます。
数値式または float 式で定義されたビューでインデックスを使用するクエリの結果は、ビューでインデックスを使用しない同様のクエリとは異なる場合があります。 この違いは、基になるテーブルに対する INSERT
、 DELETE
、または UPDATE
アクションの間にエラーが丸められている場合に発生する可能性があります。
データベース エンジンは、ビューの作成時に SET QUOTED_IDENTIFIER
と SET ANSI_NULLS
の設定を保存します。 これらの元の設定は、ビューの使用時に、ビューの解析で使用されます。 したがって、 SET QUOTED_IDENTIFIER
および SET ANSI_NULLS
のクライアント セッション設定は、ビューにアクセスするときにビュー定義に影響しません。
Azure Synapse Analytics では、ビューはスキーマ バインドをサポートしていません。 そのため、基になるオブジェクトに変更が加えられた場合は、ビューを削除して再作成して、基になるメタデータを更新する必要があります。 詳細については、「Azure Synapse Analytics の専用 SQL プールとサーバーレス SQL プールを使用した T-SQL ビュー」を参照してください。
Azure Synapse Analytics では、更新可能なビュー、DML トリガー ( AFTER
または INSTEAD OF
のいずれかの種類)、パーティション ビューはサポートされていません。 詳細については、「Azure Synapse Analytics の専用 SQL プールとサーバーレス SQL プールを使用した T-SQL ビュー」を参照してください。
Azure Synapse Analytics では、パーティション ビューはサポートされていません。 詳細については、「Azure Synapse Analytics の専用 SQL プールとサーバーレス SQL プールを使用した T-SQL ビュー」を参照してください。
Fabric SQL データベースではビューを作成できますが、Fabric OneLake にされません。 詳細については、「 Fabric SQL データベース ミラーリングの制限」を参照してください。
更新可能なビュー
次の条件を満たす場合、ビューから基になるベース テーブルのデータを変更できます。
UPDATE
、INSERT
、DELETE
ステートメントなどの変更は、1 つのベース テーブルからのみ列を参照する必要があります。ビューにある変更対象の列が、テーブルの列内にある基になるデータを直接参照している。 ただし次のような方法では、列は派生されません。
集計関数:
AVG
、COUNT
、SUM
、MIN
、MAX
、GROUPING
、STDEV
、STDEVP
、VAR
、およびVARP
。計算。 他の列を使用する式を基にして列を計算することはできません。 計算に相当する set 演算子 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 インスタンス上にあるビュー) と分散パーティション ビュー (ビュー内の少なくとも 1 つのテーブルが別のサーバーまたはリモート サーバー上にあるビュー) が区別されます。
パーティション ビュー
パーティション ビューは、同じ方法で構造化されたメンバー テーブルの UNION ALL
によって定義されるビューですが、SQL Server の同じインスタンスまたはフェデレーション データベース サーバーと呼ばれる SQL Server サーバーの自律インスタンスのグループに複数のテーブルとして個別に格納されます。
注
1 台のサーバーに対してローカルでデータをパーティション分割する方法としては、パーティション テーブルをお勧めします。 詳細については、「 Partitioned Tables and Indexes」を参照してください。
パーティション分割スキームを設計するときは、各パーティションに属するデータを明確にする必要があります。 たとえば、Customers
テーブルのデータは、3 つのサーバー位置にある 3 つのメンバー テーブル、つまり、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
の場合と同様に、列を暗黙的に変換可能な型にするには十分ではありません。また、すべての選択リストの同じ位置に、少なくとも 1 つの列 (たとえば
<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
の制約の 1 つにのみ該当するような形式にする必要があります。 連続しない制約が定義されている列<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 の一部です。
計算列、ID 列、既定の列、または timestamp 列に対して指定することはできません。
メンバー テーブルの同じ列に複数の制約が定義されている場合、データベース エンジンではすべての制約が無視され、ビューがパーティション ビューであるかどうかを判断する際にそれらの制約は考慮されません。 パーティション ビューの条件を満たすには、パーティション分割列にパーティション分割制約を 1 つだけにします。
パーティション分割列の更新可能性に制限はありません。
メンバー テーブルまたは基になるテーブル
T1, ..., Tn
テーブルは、ローカル テーブルまたは SQL Server が実行されている他のコンピューター上のテーブルのいずれかになります。他のコンピューター上のテーブルの場合は、4 つの要素で構成される名前か、OPENDATASOURCE ベースまたは OPENROWSET ベースの名前で参照されます。 OPENDATASOURCE および OPENROWSET の構文では、テーブル名は指定できますが、パススルー クエリは指定できません。 詳細については、「OPENDATASOURCE (Transact-SQL)」および「OPENROWSET (Transact-SQL)」を参照してください。
1 つ以上のメンバー テーブルがリモートにある場合、そのビューは分散パーティション ビューと呼ばれ、さらに条件が適用されます。 これらについてはこのセクションの後で説明します。
同じテーブルを、
UNION ALL
ステートメントと組み合わせた一連のテーブルに 2 回表示することはできません。メンバー テーブルでは、テーブル内の計算列上にインデックスを作成することはできません。
メンバー テーブルでは、すべての PRIMARY KEY 制約が同じ数の列に対して与えられます。
ビューのすべてのメンバー テーブルには、同じ ANSI PADDING 設定が与えられます。 これは、の
sp_configure
オプションまたは SET ステートメントを使用して設定できます。
パーティション ビューのデータを変更するための条件
パーティション ビューのデータを変更するステートメントには、次の制限が適用されます。
INSERT
ステートメントは、基になるメンバー テーブルにそれらの列のDEFAULT
制約がある場合や、NULL
値が許可されている場合でも、ビュー内のすべての列の値を提供します。DEFAULT
定義を持つメンバー テーブル列の場合、ステートメントでキーワードDEFAULT
を明示的に使用することはできません。パーティション分割列に挿入される値は、基になる制約の少なくとも 1 つを満たします。それ以外の場合、挿入アクションは制約違反で失敗します。
UPDATE
ステートメントでは、対応するメンバー テーブルでDEFAULT
値が定義されている場合でも、SET
句の値としてDEFAULT
キーワードを指定できません。1 つ以上のメンバー テーブルの ID 列であるビュー内の列は、
INSERT
またはUPDATE
ステートメントを使用して変更することはできません。いずれかのメンバー テーブルに タイムスタンプ 列が含まれている場合、
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
のアクセス許可を持っている必要があります。
分散パーティション ビューの追加条件
分散パーティション ビュー (1 つまたは複数のメンバー テーブルがリモートの場合) では、次の追加条件が適用されます。
更新の影響を受けるすべてのノードでアトミック性を保証するために、分散トランザクションが開始されます。
XACT_ABORT SET
、ON
、またはINSERT
ステートメントが機能するように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 アクションでは、DEFAULT キーワードを使用できないため、値としてNEWID()
を指定する必要があります。ビューを使用した更新のレプリケーションは、2 つの異なるデータベースでのテーブルのレプリケーションと同じです。つまり、テーブルは異なるレプリケーション エージェントで管理されるため、更新の順序は保証されません。
アクセス許可
データベースの CREATE VIEW 権限と、ビューが作成されているスキーマの ALTER 権限が必要です。
例
次の例では、AdventureWorks2022
または AdventureWorksDW2022
データベースを使用します。
A。 CREATE VIEW を使用してビューを作成する
次の例では、 SELECT
ステートメントを使用してビューを作成します。 簡易ビューは、列の組み合わせを頻繁にクエリする場合に便利です。 このビューのデータは、AdventureWorks2022 データベースの HumanResources.Employee
と Person.Person
テーブルから取得されます。 このデータには、Adventure Works Cycles の従業員の名前と採用日の情報が含まれています。 従業員の勤続祝いの担当者用にビューを作成することができますが、この担当者はテーブルのすべてのデータにアクセスできるわけではありません。
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 Database。
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
C. WITH CHECK オプションを使用する
次の例では、5 つのテーブルを参照する 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
E. パーティション 分割されたデータを使用する
次の例では、SUPPLY1
、SUPPLY2
、SUPPLY3
、SUPPLY4
というテーブルを使用します。 これらのテーブルは、異なるリージョンにある 4 つのオフィスの仕入先テーブルに対応しています。
--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、Analytics Platform System (PDW)
F. 2 つのテーブルを結合することでビューを作成する
次の例では、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);
関連コンテンツ
- テーブル変更 (Transact-SQL)
- ビューの変更 (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)