次の方法で共有


CREATE VIEW (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric WarehouseMicrosoft Fabric SQL Database

クエリによって内容 (列と行) が定義される仮想テーブルを作成します。 このステートメントを使用して、データベースの 1 つまたは複数のテーブル内のデータのビューを作成します。 たとえば、ビューは次の目的で使用できます。

  • 各ユーザーのデータベースに対する認識を特化、簡素化、およびカスタマイズする。

  • 基になるベース テーブルに直接アクセスする権限をユーザーに与えずに、ユーザーがビューを介してデータにアクセスできるように設定することにより、セキュリティのメカニズムとして使用する。

  • テーブルのスキーマが変更された場合に、そのテーブルをエミュレートするための後方互換性インターフェイスを提供する。

Transact-SQL 構文表記規則

構文

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_statementSELECT ステートメントを使用するため、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.viewssys.columnssys.sql_expression_dependencies に格納されます。 CREATE VIEW ステートメントのテキストは、sys.sql_modules カタログ ビューに格納されます。

数値式または float 式で定義されたビューでインデックスを使用するクエリの結果は、ビューでインデックスを使用しない同様のクエリとは異なる場合があります。 この違いは、基になるテーブルに対する INSERTDELETE、または UPDATE アクションの間にエラーが丸められている場合に発生する可能性があります。

データベース エンジンは、ビューの作成時に SET QUOTED_IDENTIFIERSET 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 データベース ミラーリングの制限」を参照してください。

更新可能なビュー

次の条件を満たす場合、ビューから基になるベース テーブルのデータを変更できます。

  • UPDATEINSERTDELETEステートメントなどの変更は、1 つのベース テーブルからのみ列を参照する必要があります。

  • ビューにある変更対象の列が、テーブルの列内にある基になるデータを直接参照している。 ただし次のような方法では、列は派生されません。

    • 集計関数: AVGCOUNTSUMMINMAXGROUPINGSTDEVSTDEVPVAR、および VARP

    • 計算。 他の列を使用する式を基にして列を計算することはできません。 計算に相当する set 演算子 UNION、UNION ALL、CROSSJOIN、EXCEPT、INTERSECT を使用して形成される列も計算されません。

  • 変更される列は、 GROUP BYHAVING、または DISTINCT 句の影響を受けません。

  • TOP は、ビューの select_statement 内のどこにも、 WITH CHECK OPTION 句と共に使用されません。

以前の制限は、ビュー自体に適用されるのと同様に、ビューの FROM 句のサブクエリにも適用されます。 通常は、データベース エンジンでは、ビュー定義からベース テーブルへの変更を正確にトレースできる必要があります。 詳細については、「ビューを使用したデータ変更」を参照してください。

以前の制約によってビューから直接データを変更できない場合は、次の方法を試してください。

  • INSTEAD OF トリガー

    INSTEAD OF トリガーをビューに作成して、ビューを更新可能にすることができます。 INSTEAD OF トリガーは、トリガーが定義されているデータ変更ステートメントの代わりに実行されます。 このトリガーで、データ変更ステートメントを処理するために発生させる必要がある、一連のアクションを指定できます。 したがって、特定のデータ変更ステートメント (INSTEAD OFINSERT、またはUPDATE) のビューに対してDELETE トリガーが存在する場合、対応するビューはそのステートメントを通じて更新できます。 INSTEAD OF トリガーの詳細については、「DML トリガー」を参照してください。

  • パーティション ビュー

    ビューがパーティション ビューである場合は、特定の制限の範囲内で更新可能です。 必要に応じて、データベース エンジンでは、ローカル パーティション ビュー (参加しているすべてのテーブルとビューが同じ SQL Server インスタンス上にあるビュー) と分散パーティション ビュー (ビュー内の少なくとも 1 つのテーブルが別のサーバーまたはリモート サーバー上にあるビュー) が区別されます。

パーティション ビュー

パーティション ビューは、同じ方法で構造化されたメンバー テーブルの UNION ALL によって定義されるビューですが、SQL Server の同じインスタンスまたはフェデレーション データベース サーバーと呼ばれる SQL Server サーバーの自律インスタンスのグループに複数のテーブルとして個別に格納されます。

1 台のサーバーに対してローカルでデータをパーティション分割する方法としては、パーティション テーブルをお勧めします。 詳細については、「 Partitioned Tables and Indexes」を参照してください。

パーティション分割スキームを設計するときは、各パーティションに属するデータを明確にする必要があります。 たとえば、Customers テーブルのデータは、3 つのサーバー位置にある 3 つのメンバー テーブル、つまり、Customers_33Server1Customers_66Server2Customers_99Server3 に配分されます。

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;  

パーティション ビューを作成するための条件

  1. 選択リスト (list

    • ビュー定義の列リストで、メンバー テーブルのすべての列を選択します。

    • それぞれの select list の同じ位置にある列は、照合順序も含めて同じ型にします。 一般に UNIONの場合と同様に、列を暗黙的に変換可能な型にするには十分ではありません。

      また、すべての選択リストの同じ位置に、少なくとも 1 つの列 (たとえば <col>) が指定されている必要があります。 <col> は、メンバー テーブル T1, ..., TnC1, ..., 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] }  
      
    • 選択リストで同じ列を複数回使用することはできません。

  2. パーティション分割列

    • パーティション分割列は、テーブルの PRIMARY KEY の一部です。

    • 計算列、ID 列、既定の列、または timestamp 列に対して指定することはできません。

    • メンバー テーブルの同じ列に複数の制約が定義されている場合、データベース エンジンではすべての制約が無視され、ビューがパーティション ビューであるかどうかを判断する際にそれらの制約は考慮されません。 パーティション ビューの条件を満たすには、パーティション分割列にパーティション分割制約を 1 つだけにします。

    • パーティション分割列の更新可能性に制限はありません。

  3. メンバー テーブルまたは基になるテーブル 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 制約が含まれている場合、ビューを変更することはできません。

  • INSERTUPDATE、およびパーティション ビューに対する DELETE アクションは、同じビューまたはステートメント内のいずれかのメンバー テーブルとの自己結合がある場合は許可されません。

  • パーティション ビューへのデータの一括インポートは、 bcp または BULK INSERT および INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントではサポートされていません。 しかし、INSERT ステートメントを使用することにより、パーティション ビューに複数の行を挿入できます。

    パーティション ビューを更新するには、ユーザーがメンバー テーブルに対する INSERTUPDATE、および DELETE のアクセス許可を持っている必要があります。

分散パーティション ビューの追加条件

分散パーティション ビュー (1 つまたは複数のメンバー テーブルがリモートの場合) では、次の追加条件が適用されます。

  • 更新の影響を受けるすべてのノードでアトミック性を保証するために、分散トランザクションが開始されます。

  • XACT_ABORT SETON、またはINSERTステートメントが機能するようにUPDATEするDELETE オプションを設定します。

  • パーティション ビューで参照されるリモート テーブルの smallmoney 型の列は、money としてマップされます。 このため、ローカル テーブルの対応する列 (選択リストの同じ順番にある列) も、money 型であることが必要です。

  • データベース互換性レベル 110 以上では、パーティション ビューで参照されるリモート テーブルの smalldatetime 型の列は、smalldatetime としてマップされます。 ローカル テーブルの対応する列 (選択リストの同じ順番にある列) は、smalldatetime であることが必要です。 この動作は、以前のバージョンの SQL Server から変更されています。以前のバージョンでは、パーティション ビューで参照されるリモート テーブルの smalldatetime 型の列は datetime としてマップされ、ローカル テーブルの対応する列は datetime 型であることが必要でした。 詳細については、「ALTER DATABASE 互換性レベル (Transact-SQL)」を参照してください。

  • パーティション ビューのリンク サーバーは、ループバック リンク サーバーにすることはできません。 ループバック リンク サーバーは、同じ SQL Server インスタンスを指すリンク サーバーです。

SET ROWCOUNT オプションの設定は、更新可能なパーティション ビューとリモート テーブルを含むINSERTUPDATE、および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.EmployeePerson.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. パーティション 分割されたデータを使用する

次の例では、SUPPLY1SUPPLY2SUPPLY3SUPPLY4 というテーブルを使用します。 これらのテーブルは、異なるリージョンにある 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);