CREATE VIEW (Transact-SQL)CREATE VIEW (Transact-SQL)

適用対象: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel Data Warehouse

クエリによって内容 (列と行) が定義される仮想テーブルを作成します。Creates a virtual table whose contents (columns and rows) are defined by a query. このステートメントを使用して、データベースの 1 つまたは複数のテーブル内のデータのビューを作成します。Use this statement to create a view of the data in one or more tables in the database. たとえば、ビューは次の目的で使用できます。For example, a view can be used for the following purposes:

  • 各ユーザーのデータベースに対する認識を特化、簡素化、およびカスタマイズする。To focus, simplify, and customize the perception each user has of the database.

  • 基になるベース テーブルに直接アクセスする権限をユーザーに与えずに、ユーザーがビューを介してデータにアクセスできるように設定することにより、セキュリティのメカニズムとして使用する。As a security mechanism by allowing users to access data through the view, without granting the users permissions to directly access the underlying base tables.

  • テーブルのスキーマが変更された場合に、そのテーブルをエミュレートするための後方互換性インターフェイスを提供する。To provide a backward compatible interface to emulate a table whose schema has changed.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and Azure SQL Database  
  
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 ]       
}   
-- Syntax for Azure SQL Data Warehouse and 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>  

引数Arguments

OR ALTEROR ALTER
適用対象: Azure SQL データベースAzure SQL Database および SQL ServerSQL Server (SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 以降)。Applies to: Azure SQL データベースAzure SQL Database and SQL ServerSQL Server (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1).

ビューが既に存在する場合にのみ、条件付きでビューを変更します。Conditionally alters the view only if it already exists.

schema_nameschema_name
ビューが所属するスキーマの名前を指定します。Is the name of the schema to which the view belongs.

view_nameview_name
ビューの名前です。Is the name of the view. ビュー名は、識別子のルールに従っている必要があります。View names must follow the rules for identifiers. ビューの所有者名の指定は省略可能です。Specifying the view owner name is optional.

columncolumn
ビューの列に付ける名前を指定します。Is the name to be used for a column in a view. 列名が必要なのは、算術式、関数、または定数から列を導いた場合と、名前を付けないと (通常、結合によって) 2 つ以上の列の名前が同じになる場合、および、ビュー内の列に派生元と異なる列名を付ける場合に限られます。A column name is required only when a column is derived from an arithmetic expression, a function, or a constant; when two or more columns may otherwise have the same name, typically because of a join; or when a column in a view is specified a name different from that of the column from which it is derived. 列名は、SELECT ステートメントで指定することもできます。Column names can also be assigned in the SELECT statement.

column を指定しなかった場合は、SELECT ステートメントの列の名前が、このビューの列名として使用されます。If column is not specified, the view columns acquire the same names as the columns in the SELECT statement.

注意

ビューの列では、基底となるデータのソースにかかわらず、列名に対する権限は、CREATE VIEW ステートメントまたは ALTER VIEW ステートメントを超えて適用されます。In the columns for the view, the permissions for a column name apply across a CREATE VIEW or ALTER VIEW statement, regardless of the source of the underlying data. たとえば、CREATE VIEW ステートメントで SalesOrderID 列に対して権限が与えられる場合、ALTER VIEW ステートメントでは SalesOrderID 列に OrderRef などの異なる列名を付けることができ、その後も SalesOrderID を使用してビューに関連付けられた権限を保持します。For example, if permissions are granted on the SalesOrderID column in a CREATE VIEW statement, an ALTER VIEW statement can name the SalesOrderID column with a different column name, such as OrderRef, and still have the permissions associated with the view using SalesOrderID.

ASAS
ビューが行う動作を指定します。Specifies the actions the view is to perform.

select_statementselect_statement
ビューを定義している SELECT ステートメントを指定します。Is the SELECT statement that defines the view. このステートメントでは、複数のテーブルや他のビューを使用することもできます。The statement can use more than one table and other views. 作成するビューの SELECT 句で参照されるオブジェクトから選択するには、適切な権限が必要です。Appropriate permissions are required to select from the objects referenced in the SELECT clause of the view that is created.

ビューは、1 つの特定のテーブルの行と列の簡単なサブセットである必要はありません。A view does not have to be a simple subset of the rows and columns of one particular table. 複雑な SELECT 句で、複数のテーブルまたは他のビューを使用するビューを作成することもできます。A view can be created that uses more than one table or other views with a SELECT clause of any complexity.

インデックス付きビュー定義では、SELECT ステートメントは、単一のテーブル ステートメントまたは複数のテーブルの JOIN (集計は省略可) にする必要があります。In an indexed view definition, the SELECT statement must be a single table statement or a multitable JOIN with optional aggregation.

ビュー定義の SELECT 句に、次を含めることはできません。The SELECT clauses in a view definition cannot include the following:

  • ORDER BY 句。ただし、SELECT ステートメントの選択リストに TOP 句が同時に含まれている場合は例外です。An ORDER BY clause, unless there is also a TOP clause in the select list of the SELECT statement

    重要

    ORDER BY 句は、ビュー定義において TOP 句または OFFSET 句によって返される行を決定する場合にのみ使用されます。The ORDER BY clause is used only to determine the rows that are returned by the TOP or OFFSET clause in the view definition. クエリ自体にも ORDER BY を指定しない限り、ビューをクエリしたときに、ORDER BY 句で順序どおりの結果が得られるかどうかは保証されません。The ORDER BY clause does not guarantee ordered results when the view is queried, unless ORDER BY is also specified in the query itself.

  • INTO キーワードThe INTO keyword

  • OPTION 句。The OPTION clause

  • 一時テーブルまたはテーブル変数の参照。A reference to a temporary table or a table variable.

select_statement では SELECT ステートメントが使用されるため、FROM 句で指定される <join_hint> および <table_hint> の各ヒントを使用できます。Because select_statement uses the SELECT statement, it is valid to use <join_hint> and <table_hint> hints as specified in the FROM clause. 詳細については、「FROM (Transact-SQL)」および「SELECT (Transact-SQL)」を参照してください。For more information, see FROM (Transact-SQL) and SELECT (Transact-SQL).

select_statement では、関数と複数の SELECT ステートメントを UNION または UNION ALL で区切って使用できます。Functions and multiple SELECT statements separated by UNION or UNION ALL can be used in select_statement.

CHECK OPTIONCHECK OPTION
ビューに対して実行されるすべてのデータ変更ステートメントについて、select_statement 内で設定される条件に従うよう強制します。Forces all data modification statements executed against the view to follow the criteria set within select_statement. ビューを介して行を変更する場合は、WITH CHECK OPTION を使用すると、変更がコミットされた後もビューを介して確実にデータを表示できます。When a row is modified through a view, the WITH CHECK OPTION makes sure the data remains visible through the view after the modification is committed.

注意

ビューの基になるテーブルに対して直接更新が実行された場合は、CHECK OPTION を指定してもビューに対する確認は行われません。Any updates performed directly to a view's underlying tables are not verified against the view, even if CHECK OPTION is specified.

ENCRYPTIONENCRYPTION
適用対象: SQL Server 2008SQL Server 2008 から SQL ServerSQL Server および Azure SQL データベースAzure SQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server and Azure SQL データベースAzure SQL Database.

CREATE VIEW ステートメントのテキストが含まれている sys.syscomments のエントリを暗号化します。Encrypts the entries in sys.syscomments that contain the text of the CREATE VIEW statement. WITH ENCRYPTION を使用すると、そのビューを SQL Server レプリケーションの一部として発行できなくなります。Using WITH ENCRYPTION prevents the view from being published as part of SQL Server replication.

SCHEMABINDINGSCHEMABINDING
基になるテーブルのスキーマにビューをバインドします。Binds the view to the schema of the underlying table or tables. SCHEMABINDING を指定した場合、ベース テーブルに対してビュー定義に影響を与えるような変更を行うことはできません。When SCHEMABINDING is specified, the base table or tables cannot be modified in a way that would affect the view definition. まずビュー定義を変更または削除して、変更するテーブルとの依存関係を解消する必要があります。The view definition itself must first be modified or dropped to remove dependencies on the table that is to be modified. SCHEMABINDING を使用する場合は、select_statement に、参照されるテーブル、ビュー、またはユーザー定義関数の名前として、2 つの部分から構成される名前 (schema . object) を指定する必要があります。When you use SCHEMABINDING, the select_statement must include the two-part names (schema.object) of tables, views, or user-defined functions that are referenced. 参照されるオブジェクトは、すべて同じデータベース内にあることが必要です。All referenced objects must be in the same database.

SCHEMABINDING 句を指定して作成したビューに参加しているビューまたはテーブルは、そのビューが削除または変更されてスキーマ バインドがなくならない限り削除できません。Views or tables that participate in a view created with the SCHEMABINDING clause cannot be dropped unless that view is dropped or changed so that it no longer has schema binding. スキーマ バインドが残っている場合は、データベース エンジンDatabase Engineからエラーが返されます。Otherwise, the データベース エンジンDatabase Engine raises an error. また、ビュー定義に影響を与える ALTER TABLE ステートメントを、スキーマ バインドを持つビューに参加しているテーブルに対して実行しても、ステートメントは失敗します。Also, executing ALTER TABLE statements on tables that participate in views that have schema binding fail when these statements affect the view definition.

VIEW_METADATAVIEW_METADATA
ビューを参照するクエリ用にブラウズ モード メタデータが要求されている場合、SQL ServerSQL Server インスタンスは、DB-Library、ODBC、および OLE DB API に対して、ベース テーブルではなくビューに関するメタデータ情報を返します。Specifies that the instance of SQL ServerSQL Server will return to the DB-Library, ODBC, and OLE DB APIs the metadata information about the view, instead of the base table or tables, when browse-mode metadata is being requested for a query that references the view. ブラウズ モード メタデータは、SQL ServerSQL Server インスタンスからクライアント側 API に返される追加のメタデータです。Browse-mode metadata is additional metadata that the instance of SQL ServerSQL Server returns to these client-side APIs. クライアント側 API ではこのメタデータによって、更新可能なクライアント側カーソルを実装できます。This metadata enables the client-side APIs to implement updatable client-side cursors. ブラウズ モード メタデータには、結果セット内の列が属するベース テーブルの情報が含まれています。Browse-mode metadata includes information about the base table that the columns in the result set belong to.

VIEW_METADATA で作成したビューの場合、ブラウズ モード メタデータでは結果セット内のビューの列の説明で、ベース テーブル名ではなくビュー名が返されます。For views created with VIEW_METADATA, the browse-mode metadata returns the view name and not the base table names when it describes columns from the view in the result set.

WITH VIEW_METADATA を使用してビューを作成するとき、timestamp 列を除くすべての列は、ビューに INSTEAD OF INSERT または INSTEAD OF UPDATE トリガーが含まれている場合に更新可能になります。When a view is created by using WITH VIEW_METADATA, all its columns, except a timestamp column, are updatable if the view has INSTEAD OF INSERT or INSTEAD OF UPDATE triggers. 更新可能なビューの詳細については、「解説」を参照してください。For more information about updatable views, see Remarks.

RemarksRemarks

ビューは現在のデータベースでのみ作成できます。A view can be created only in the current database. CREATE VIEW は、クエリ バッチの最初のステートメントであることが必要です。The CREATE VIEW must be the first statement in a query batch. 1 つのビューで保持できる列の数は最大 1,024 です。A view can have a maximum of 1,024 columns.

ビューからクエリを実行すると、データベース エンジンDatabase Engine では、ステートメントで参照されているデータベース オブジェクトがすべて存在すること、データベース オブジェクトがステートメントのコンテキストで有効であること、およびデータ変更ステートメントがデータの整合性規則に違反していないことが確認されます。When querying through a view, the データベース エンジンDatabase Engine checks to make sure that all the database objects referenced anywhere in the statement exist and that they are valid in the context of the statement, and that data modification statements do not violate any data integrity rules. 確認に失敗すると、エラー メッセージが返されます。A check that fails returns an error message. 確認に成功すると、そのアクションが、基になるテーブルに対するアクションに変換されます。A successful check translates the action into an action against the underlying table or tables.

削除されたテーブル (またはビュー) に従属しているビューを使用すると、データベース エンジンDatabase Engine ではエラー メッセージが返されます。If a view depends on a table or view that was dropped, the データベース エンジンDatabase Engine produces an error message when anyone tries to use the view. テーブルの構造が以前のベース テーブルから変わっていなければ、削除されたテーブルやビューの代わりになる、新しいテーブルまたはビューを作成すると、ビューは再び使用可能になります。If a new table or view is created and the table structure does not change from the previous base table to replace the one dropped, the view again becomes usable. 新しいテーブルまたはビューの構造が変化した場合は、ビューを削除し、再作成する必要があります。If the new table or view structure changes, the view must be dropped and re-created.

ビューが SCHEMABINDING 句を使用して作成したものでない場合、ビューの基になっているオブジェクトに対して、ビューの定義に影響するような変更が行われた際には、sp_refreshview を実行します。If a view is not created with the SCHEMABINDING clause, run sp_refreshview when changes are made to the objects underlying the view that affect the definition of the view. それ以外の場合は、ビューのクエリ時に、予期しない結果が生成される可能性があります。Otherwise, the view might produce unexpected results when it is queried.

ビューが作成されると、ビューについての情報がカタログ ビュー sys.viewssys.columnssys.sql_expression_dependencies に格納されます。When a view is created, information about the view is stored in the following catalog views: sys.views, sys.columns, and sys.sql_expression_dependencies. CREATE VIEW ステートメントのテキストは、sys.sql_modules カタログ ビューに格納されます。The text of the CREATE VIEW statement is stored in the sys.sql_modules catalog view.

numeric または float 型の式で定義されたビューのインデックスを使用するクエリでは、ビューのインデックスを使用しない類似したクエリとは、異なる結果セットが返されます。A query that uses an index on a view defined with numeric or float expressions may have a result that is different from a similar query that does not use the index on the view. この相違は、基になるテーブルに対して INSERT、DELETE、または UPDATE アクションを行った場合の丸め誤差によって発生することがあります。This difference may be caused by rounding errors during INSERT, DELETE, or UPDATE actions on underlying tables.

ビューを作成すると、データベース エンジンDatabase Engineでは、SET QUOTED_IDENTIFIER と SET ANSI_NULLS の設定が保存されます。The データベース エンジンDatabase Engine saves the settings of SET QUOTED_IDENTIFIER and SET ANSI_NULLS when a view is created. これらの元の設定は、ビューの使用時に、ビューの解析で使用されます。These original settings are used to parse the view when the view is used. したがって、ビューへアクセスするとき、SET QUOTED_IDENTIFIER と SET ANSI_NULLS のクライアント セッションの設定によってビュー定義に影響が生じることはありません。Therefore, any client-session settings for SET QUOTED_IDENTIFIER and SET ANSI_NULLS do not affect the view definition when the view is accessed.

更新可能なビューUpdatable Views

次の条件を満たす場合、ビューから基になるベース テーブルのデータを変更できます。You can modify the data of an underlying base table through a view, as long as the following conditions are true:

  • UPDATE、INSERT、DELETE ステートメントなどの変更で、1 つのベース テーブルのみの列を参照している。Any modifications, including UPDATE, INSERT, and DELETE statements, must reference columns from only one base table.

  • ビューにある変更対象の列が、テーブルの列内にある基になるデータを直接参照している。The columns being modified in the view must directly reference the underlying data in the table columns. ただし次のような方法では、列は派生されません。The columns cannot be derived in any other way, such as through the following:

    • 集計関数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR、VARP。An aggregate function: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, and VARP.

    • 計算。A computation. 他の列を使用する式を基にして列を計算することはできません。The column cannot be computed from an expression that uses other columns. 計算に相当する set 演算子 UNION、UNION ALL、CROSSJOIN、EXCEPT、INTERSECT を使用して形成される列も計算されません。Columns that are formed by using the set operators UNION, UNION ALL, CROSSJOIN, EXCEPT, and INTERSECT amount to a computation and are also not updatable.

  • 変更される列が、GROUP BY、HAVING、または DISTINCT 句の影響を受けない。The columns being modified are not affected by GROUP BY, HAVING, or DISTINCT clauses.

  • ビューの select_statement 内で、TOP が WITH CHECK OPTION 句と共に使用されていない。TOP is not used anywhere in the select_statement of the view together with the WITH CHECK OPTION clause.

以前の制限は、ビュー自体に適用されるのと同様に、ビューの FROM 句のサブクエリにも適用されます。The previous restrictions apply to any subqueries in the FROM clause of the view, just as they apply to the view itself. 通常は、データベース エンジンDatabase Engineでは、ビュー定義からベース テーブルへの変更を正確にトレースできる必要があります。Generally, the データベース エンジンDatabase Engine must be able to unambiguously trace modifications from the view definition to one base table. 詳細については、「ビューを使用したデータ変更」を参照してください。For more information, see Modify Data Through a View.

以前の制約によってビューから直接データを変更できない場合は、次の方法を試してください。If the previous restrictions prevent you from modifying data directly through a view, consider the following options:

  • INSTEAD OF トリガーINSTEAD OF Triggers

    ビューに INSTEAD OF トリガーを作成して、そのビューを更新可能にできます。INSTEAD OF triggers can be created on a view to make a view updatable. INSTEAD OF トリガーは、そのトリガーが定義されているデータ変更ステートメントの代わりに実行されます。The INSTEAD OF trigger is executed instead of the data modification statement on which the trigger is defined. このトリガーで、データ変更ステートメントを処理するために発生させる必要がある、一連のアクションを指定できます。This trigger lets the user specify the set of actions that must happen to process the data modification statement. したがって、特定のデータ変更ステートメント (INSERT、UPDATE、または DELETE) に対する INSTEAD OF トリガーがビューに存在する場合は、そのステートメントを介して対応するビューを更新できます。Therefore, if an INSTEAD OF trigger exists for a view on a specific data modification statement (INSERT, UPDATE, or DELETE), the corresponding view is updatable through that statement. INSTEAD OF トリガーの詳細については、「DML トリガー」を参照してください。For more information about INSTEAD OF triggers, see DML Triggers.

  • パーティション ビューPartitioned Views

    ビューがパーティション ビューである場合は、特定の制限の範囲内で更新可能です。If the view is a partitioned view, the view is updatable, subject to certain restrictions. 必要に応じて、データベース エンジンDatabase Engineでは、ローカル パーティション ビュー (参加しているすべてのテーブルとビューが同じ SQL ServerSQL Server インスタンス上にあるビュー) と分散パーティション ビュー (ビュー内の少なくとも 1 つのテーブルが別のサーバーまたはリモート サーバー上にあるビュー) が区別されます。When it is needed, the データベース エンジンDatabase Engine distinguishes local partitioned views as the views in which all participating tables and the view are on the same instance of SQL ServerSQL Server, and distributed partitioned views as the views in which at least one of the tables in the view resides on a different or remote server.

パーティション ビューPartitioned Views

パーティション ビューは、同じ構造のメンバー テーブルの UNION ALL によって定義されるビューです。ただし、これらのメンバー テーブルは、同じ SQL ServerSQL Server インスタンス内、または連合データベース サーバーと呼ばれる SQL ServerSQL Server サーバー インスタンスの独立したグループ内に、複数のテーブルとして個別に格納されます。A partitioned view is a view defined by a UNION ALL of member tables structured in the same way, but stored separately as multiple tables in either the same instance of SQL ServerSQL Server or in a group of autonomous instances of SQL ServerSQL Server servers, called federated database servers.

注意

1 台のサーバーに対してローカルでデータをパーティション分割する方法としては、パーティション テーブルをお勧めします。The preferred method for partitioning data local to one server is through partitioned tables. 詳細については、「 Partitioned Tables and Indexes」を参照してください。For more information, see Partitioned Tables and Indexes.

パーティション分割構成の設計時には、各パーティションに所属するデータを明確にする必要があります。In designing a partitioning scheme, it must be clear what data belongs to each partition. たとえば、Customers テーブルのデータは、3 つのサーバー位置にある 3 つのメンバー テーブル、つまり、Server1Customers_33Server2Customers_66Server3Customers_99 に配分されます。For example, the data for the Customers table is distributed in three member tables in three server locations: Customers_33 on Server1, Customers_66 on Server2, and Customers_99 on Server3.

Server1 のパーティション ビューは次のように定義されます。A partitioned view on Server1 is defined in the following way:

--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;  

一般に、次の形式の場合、ビューをパーティション ビューといいます。Generally, a view is said to be a partitioned view if it is of the following form:

SELECT <select_list1>  
FROM T1  
UNION ALL  
SELECT <select_list2>  
FROM T2  
UNION ALL  
...  
SELECT <select_listn>  
FROM Tn;  

パーティション ビューを作成する条件Conditions for Creating Partitioned Views

  1. 選択リスト (listThe select list

    • ビュー定義の列リストで、メンバー テーブルのすべての列を選択します。In the column list of the view definition, select all columns in the member tables.

    • それぞれの select list の同じ位置にある列は、照合順序も含めて同じ型にします。Ensure that the columns in the same ordinal position of each select list are of the same type, including collations. 一般的に UNION の場合のように、列が暗黙的に変換される型にするだけでは十分ではありません。It is not sufficient for the columns to be implicitly convertible types, as is generally the case for UNION.

      また、すべての選択リストの同じ位置に、少なくとも 1 つの列 (たとえば <col>) が指定されている必要があります。Also, at least one column (for example <col>) must appear in all the select lists in the same ordinal position. <col> は、メンバー テーブル T1, ..., Tn<col> にそれぞれ CHECK 制約 C1, ..., Cn が定義されるように定義します。Define <col> in a way that the member tables T1, ..., Tn have CHECK constraints C1, ..., Cn defined on <col>, respectively.

      テーブル C1 の制約 T1 は、次の形式で定義する必要があります。Constraint C1 defined on table T1 must be of the following form:

      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 つにのみ該当するような形式にする必要があります。The constraints must be in such a way that any specified value of <col> can satisfy, at most, one of the constraints C1, ..., Cn so that the constraints form a set of disjointed or nonoverlapping intervals. 連続しない制約が定義されている列 <col> は、パーティション分割列と呼ばれます。The column <col> on which the disjointed constraints are defined is called the partitioning column. パーティション分割列は、基になるテーブルではそれぞれ異なる名前が付いている場合があります。Note that the partitioning column may have different names in the underlying tables. 前に示したパーティション分割列の条件を満たすには、パーティション分割列に対して制約が有効かつ信頼されている必要があります。The constraints must be in an enabled and trusted state for them to meet the previously mentioned conditions of the partitioning column. 制約が無効の場合は、ALTER TABLE の CHECK CONSTRAINT constraint_name オプションを使用して制約チェックを再度有効にし、WITH CHECK オプションを使用して制約を検証します。If the constraints are disabled, re-enable constraint checking by using the CHECK CONSTRAINT constraint_name option of ALTER TABLE, and using the WITH CHECK option to validate them.

      次は、有効な制約のセットの例です。The following examples show valid sets of constraints:

      { [col < 10], [col between 11 and 20] , [col > 20] }  
      { [col between 11 and 20], [col between 21 and 30], [col between 31 and 100] }  
      
    • 選択リストで同じ列を複数回使用することはできません。The same column cannot be used multiple times in the select list.

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

    • パーティション分割列は、テーブルの PRIMARY KEY の一部です。The partitioning column is a part of the PRIMARY KEY of the table.

    • 計算列、ID 列、既定の列、または timestamp 列に対して指定することはできません。It cannot be a computed, identity, default, or timestamp column.

    • メンバー テーブルの同じ列に複数の制約が定義されている場合、データベース エンジンではすべての制約が無視され、ビューがパーティション ビューであるかどうかを判断する際にそれらの制約は考慮されません。If there is more than one constraint on the same column in a member table, the Database Engine ignores all the constraints and does not consider them when determining whether the view is a partitioned view. パーティション ビューの条件を満たすには、パーティション分割列にパーティション分割制約を 1 つだけにします。To meet the conditions of the partitioned view, ensure that there is only one partitioning constraint on the partitioning column.

    • パーティション分割列の更新可能性に制限はありません。There are no restrictions on the updatability of the partitioning column.

  3. メンバー テーブルまたは基になるテーブル T1, ..., TnMember tables, or underlying tables T1, ..., Tn

    • テーブルは、ローカル テーブルまたは SQL ServerSQL Server が実行されている他のコンピューター上のテーブルのいずれかになります。他のコンピューター上のテーブルの場合は、4 つの要素で構成される名前か、OPENDATASOURCE ベースまたは OPENROWSET ベースの名前で参照されます。The tables can be either local tables or tables from other computers that are running SQL ServerSQL Server that are referenced either through a four-part name or an OPENDATASOURCE- or OPENROWSET-based name. OPENDATASOURCE および OPENROWSET の構文では、テーブル名は指定できますが、パススルー クエリは指定できません。The OPENDATASOURCE and OPENROWSET syntax can specify a table name, but not a pass-through query. 詳細については、「OPENDATASOURCE (Transact-SQL)」および「OPENROWSET (Transact-SQL)」を参照してください。For more information, see OPENDATASOURCE (Transact-SQL) and OPENROWSET (Transact-SQL).

      1 つ以上のメンバー テーブルがリモートにある場合、そのビューは分散パーティション ビューと呼ばれ、さらに条件が適用されます。If one or more of the member tables are remote, the view is called distributed partitioned view, and additional conditions apply. これらについてはこのセクションの後で説明します。They are described later in this section.

    • UNION ALL ステートメントで組み合わせるテーブルのセットに、同じテーブルを 2 回表示することはできません。The same table cannot appear two times in the set of tables that are being combined with the UNION ALL statement.

    • メンバー テーブルでは、テーブル内の計算列上にインデックスを作成することはできません。The member tables cannot have indexes created on computed columns in the table.

    • メンバー テーブルでは、すべての PRIMARY KEY 制約が同じ数の列に対して与えられます。The member tables have all PRIMARY KEY constraints on the same number of columns.

    • ビューのすべてのメンバー テーブルには、同じ ANSI PADDING 設定が与えられます。All member tables in the view have the same ANSI padding setting. これは、sp_configureuser options オプションまたは SET ステートメントを使用して設定できます。This can be set by using either the user options option in sp_configure or the SET statement.

パーティション ビューのデータを変更する条件Conditions for Modifying Data in Partitioned Views

パーティション ビューのデータを変更するステートメントには、次の制限が適用されます。The following restrictions apply to statements that modify data in partitioned views:

  • INSERT ステートメントでは、基になるメンバー テーブルで列に DEFAULT 制約があるか、NULL 値が許可されている場合でも、ビューのすべての列に値を提供します。The INSERT statement supplies values for all the columns in the view, even if the underlying member tables have a DEFAULT constraint for those columns or if they allow for null values. メンバー テーブルの列に DEFAULT 定義がある場合、ステートメントで明示的に DEFAULT キーワードを使用することはできません。For those member table columns that have DEFAULT definitions, the statements cannot explicitly use the keyword DEFAULT.

  • パーティション分割列に挿入する値は、基になる制約の少なくとも 1 つを満たします。満たしていない場合、INSERT アクションは制約違反で失敗します。The value being inserted into the partitioning column satisfies at least one of the underlying constraints; otherwise, the insert action will fail with a constraint violation.

  • UPDATE ステートメントでは、対応するメンバー テーブルで列の DEFAULT 値が定義されている場合でも、SET 句の値として DEFAULT キーワードを指定することはできません。UPDATE statements cannot specify the DEFAULT keyword as a value in the SET clause, even if the column has a DEFAULT value defined in the corresponding member table.

  • 1 つまたは複数のメンバー テーブルで ID 列になっているビューの列は、INSERT ステートメントまたは UPDATE ステートメントを使用して変更することはできません。Columns in the view that are an identity column in one or more of the member tables cannot be modified by using an INSERT or UPDATE statement.

  • メンバー テーブルのいずれかに timestamp 型の列が含まれている場合、データを INSERT または UPDATE ステートメントで変更することはできません。If one of the member tables contains a timestamp column, the data cannot be modified by using an INSERT or UPDATE statement.

  • メンバー テーブルに、トリガー、ON UPDATE CASCADE/SET NULL/SET DEFAULT 制約、または ON DELETE CASCADE/SET NULL/SET DEFAULT 制約が含まれている場合、ビューを変更することはできません。If one of the member tables contains a trigger or an ON UPDATE CASCADE/SET NULL/SET DEFAULT or ON DELETE CASCADE/SET NULL/SET DEFAULT constraint, the view cannot be modified.

  • ステートメント内に、同じビューまたはいずれかのメンバー テーブルとの自己結合が指定された場合、パーティション ビューに対して INSERT、UPDATE、DELETE アクションは許可されません。INSERT, UPDATE, and DELETE actions against a partitioned view are not allowed if there is a self-join with the same view or with any of the member tables in the statement.

  • パーティション ビューへのデータの一括インポートは、bcp、または BULK INSERT ステートメントや INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントを使用してデータを一括インポートする場合のフォーマット ファイルの使用方法を示します。Bulk importing data into a partitioned view is unsupported by bcp or the BULK INSERT and INSERT ... SELECT * FROM OPENROWSET(BULK...) statements. しかし、INSERT ステートメントを使用することにより、パーティション ビューに複数の行を挿入できます。However, you can insert multiple rows into a partitioned view by using the INSERT statement.

    注意

    パーティション ビューを更新するには、ユーザーはメンバー テーブルに対して INSERT、UPDATE、DELETE の各権限を持っている必要があります。To update a partitioned view, the user must have INSERT, UPDATE, and DELETE permissions on the member tables.

分散パーティション ビューの追加条件Additional Conditions for Distributed Partitioned Views

分散パーティション ビュー (1 つまたは複数のメンバー テーブルがリモートの場合) では、次の追加条件が適用されます。For distributed partitioned views (when one or more member tables are remote), the following additional conditions apply:

  • 更新によって影響を受けるすべてのノードを超えて原子性を保証するため、分散トランザクションが起動されます。A distributed transaction will be started to guarantee atomicity across all nodes affected by the update.

  • INSERT、UPDATE、または DELETE ステートメントが動作するには、XACT_ABORT SET オプションを ON に設定します。Set the XACT_ABORT SET option to ON for INSERT, UPDATE, or DELETE statements to work.

  • パーティション ビューで参照されるリモート テーブルの smallmoney 型の列は、money としてマップされます。Any columns in remote tables of type smallmoney that are referenced in a partitioned view are mapped as money. このため、ローカル テーブルの対応する列 (選択リストの同じ順番にある列) も、money 型であることが必要です。Therefore, the corresponding columns (in the same ordinal position in the select list) in the local tables must also be of type money.

  • データベース互換性レベル 110 以上では、パーティション ビューで参照されるリモート テーブルの smalldatetime 型の列は、smalldatetime としてマップされます。Under database compatibility level 110 and higher, any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as smalldatetime. ローカル テーブルの対応する列 (選択リストの同じ順番にある列) は、smalldatetime であることが必要です。Corresponding columns (in the same ordinal position in the select list) in the local tables must be smalldatetime. この動作は、以前のバージョンの SQL ServerSQL Server から変更されています。以前のバージョンでは、パーティション ビューで参照されるリモート テーブルの smalldatetime 型の列は datetime としてマップされ、ローカル テーブルの対応する列は datetime 型であることが必要でした。This is a change in behavior from earlier versions of SQL ServerSQL Server in which any columns in remote tables of type smalldatetime that are referenced in a partitioned view are mapped as datetime and corresponding columns in local tables must be of type datetime. 詳細については、「ALTER DATABASE 互換性レベル (Transact-SQL)」を参照してください。For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

  • パーティション ビューのリンク サーバーは、ループバック リンク サーバーにすることはできません。Any linked server in the partitioned view cannot be a loopback linked server. ループバック リンク サーバーは、同じ SQL ServerSQL Server インスタンスを指すリンク サーバーです。This is a linked server that points to the same instance of SQL ServerSQL Server.

更新可能なパーティション ビューとリモート テーブルに関連する INSERT、UPDATE、DELETE アクションでは、SET ROWCOUNT オプションの設定は無視されます。The setting of the SET ROWCOUNT option is ignored for INSERT, UPDATE, and DELETE actions that involve updatable partitioned views and remote tables.

メンバー テーブルとビュー定義が準備されると、SQL ServerSQL Server のクエリ オプティマイザーでは、クエリを効率的に使用してメンバー テーブルからデータにアクセスする高度なプランが構築されます。When the member tables and partitioned view definition are in place, the SQL ServerSQL Server query optimizer builds intelligent plans that use queries efficiently to access data from member tables. クエリ プロセッサでは、CHECK 制約の定義を使用して、キー値の分布が複数のメンバー テーブルにマップされます。With the CHECK constraint definitions, the query processor maps the distribution of key values across the member tables. ユーザーがクエリを実行すると、クエリ プロセッサでは、マップと WHERE 句で指定した値とが比較され、メンバー サーバー間のデータ転送が最も少なくなる実行プランが構築されます。When a user issues a query, the query processor compares the map to the values specified in the WHERE clause, and builds an execution plan with a minimal amount of data transfer between member servers. したがって、いくつかのメンバー テーブルがリモート サーバー上にある場合でも、SQL ServerSQL Server インスタンスでは転送の対象となる分散データの量が最も少なくなる方法で分散クエリが解決されます。Therefore, although some member tables may be located in remote servers, the instance of SQL ServerSQL Server resolves distributed queries so that the amount of distributed data that has to be transferred is minimal.

レプリケーションに関する注意点Considerations for Replication

レプリケーションに関係するメンバー テーブルのパーティション ビューを作成するには、次の点に注意してください。To create partitioned views on member tables that are involved in replication, the following considerations apply:

  • 基になるテーブルが、更新サブスクライバーとのマージ レプリケーションまたはトランザクション レプリケーションに関係する場合、選択リストには uniqueidentifier 列も含まれるようにします。If the underlying tables are involved in merge replication or transactional replication with updating subscriptions, ensure that the uniqueidentifier column is also included in the select list.

    パーティション ビューに対する INSERT 操作では、uniqueidentifier 列の NEWID() 値を指定する必要があります。Any INSERT actions into the partitioned view must provide a NEWID() value for the uniqueidentifier column. uniqueidentifier 列に対する UPDATE 操作では、DEFAULT キーワードを使用できないので、NEWID() を値として指定する必要があります。Any UPDATE actions against the uniqueidentifier column must supply NEWID() as the value because the DEFAULT keyword cannot be used.

  • ビューを使用した更新のレプリケーションは、2 つの異なるデータベースでのテーブルのレプリケーションと同じです。つまり、テーブルは異なるレプリケーション エージェントで管理されるため、更新の順序は保証されません。The replication of updates made by using the view is the same as when tables are replicated in two different databases: the tables are served by different replication agents and the order of the updates is not guaranteed.

アクセス許可Permissions

データベースの CREATE VIEW 権限と、ビューが作成されているスキーマの ALTER 権限が必要です。Requires CREATE VIEW permission in the database and ALTER permission on the schema in which the view is being created.

使用例Examples

次の例では、AdventureWorks 2012 または AdventureWorksDW データベースを使用します。The following examples use the AdventureWorks 2012 or AdventureWorksDW database.

A.A. シンプルな CREATE VIEW を使用するUsing a simple CREATE VIEW

次の例では、単純な SELECT ステートメントを使用してビューを作成します。The following example creates a view by using a simple SELECT statement. 簡易ビューは、列の組み合わせを頻繁にクエリする場合に便利です。A simple view is helpful when a combination of columns is queried frequently. このビューのデータは、AdventureWorks2012AdventureWorks2012 データベースの HumanResources.Employee テーブルと Person.Person テーブルから取得されます。The data from this view comes from the HumanResources.Employee and Person.Person tables of the AdventureWorks2012AdventureWorks2012 database. このデータには、Adventure Works CyclesAdventure Works Cycles の従業員の名前と採用日の情報が含まれています。The data provides name and hire date information for the employees of Adventure Works CyclesAdventure Works Cycles. 従業員の勤続祝いの担当者用にビューを作成することができますが、この担当者はテーブルのすべてのデータにアクセスできるわけではありません。The view could be created for the person in charge of tracking work anniversaries but without giving this person access to all the data in these tables.

CREATE VIEW hiredate_view  
AS   
SELECT p.FirstName, p.LastName, e.BusinessEntityID, e.HireDate  
FROM HumanResources.Employee e   
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID ;  
GO  
  

B.B. 暗号化を使用するUsing WITH ENCRYPTION

次の例では、WITH ENCRYPTION オプションを使用して、計算列、名前変更された列、複数列を表示します。The following example uses the WITH ENCRYPTION option and shows computed columns, renamed columns, and multiple columns.

適用対象: SQL Server 2008SQL Server 2008 から SQL ServerSQL Server および SQL DatabaseSQL DatabaseApplies to: SQL Server 2008SQL Server 2008 through SQL ServerSQL Server and SQL DatabaseSQL 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.C. WITH CHECK OPTION を使用するUsing WITH CHECK OPTION

次の例では、5 つのテーブルを参照する SeattleOnly というビューを表示し、シアトル在住の従業員だけにデータ変更を許可します。The following example shows a view named SeattleOnly that references five tables and allows for data modifications to apply only to employees who live in Seattle.

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.D. ビュー内の組み込み関数を使用するUsing built-in functions within a view

次の例では、組み込み関数を含むビュー定義を示しています。The following example shows a view definition that includes a built-in function. 関数を使用するときには、派生列に列名を指定する必要があります。When you use functions, you must specify a column name for the derived column.

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.E. パーティション分割されたデータを使用するUsing partitioned data

次の例では、SUPPLY1SUPPLY2SUPPLY3SUPPLY4 というテーブルを使用します。The following example uses tables named SUPPLY1, SUPPLY2, SUPPLY3, and SUPPLY4. これらのテーブルは、異なる国や地域にある 4 か所のオフィスの仕入れ先テーブルに対応しています。These tables correspond to the supplier tables from four offices, located in different countries/regions.

--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  

例: SQL データ ウェアハウスSQL Data Warehouse および Parallel Data WarehouseParallel Data WarehouseExamples: SQL データ ウェアハウスSQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

F.F. 単純なビューを作成するCreating a simple view

次の例では、ソース テーブルから一部の列のみを選択することで、ビューを作成します。The following example creates a view by selecting only some of the columns from the source table.

CREATE VIEW DimEmployeeBirthDates AS  
SELECT FirstName, LastName, BirthDate   
FROM DimEmployee;  

G.G. 2 つのテーブルを結合することでビューを作成するCreate a view by joining two tables

次の例では、OUTER JOIN と共に SELECT ステートメントを使用することで、ビューを作成します。The following example creates a view by using a SELECT statement with an OUTER JOIN. 結合クエリの結果によって、ビューが設定されます。The results of the join query populate the view.

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);  

参照See Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
ALTER VIEW (Transact-SQL) ALTER VIEW (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
DROP VIEW (Transact-SQL) DROP VIEW (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
ストアド プロシージャの作成 Create a Stored Procedure
sys.dm_sql_referenced_entities (Transact-SQL) sys.dm_sql_referenced_entities (Transact-SQL)
sys.dm_sql_referencing_entities (Transact-SQL) sys.dm_sql_referencing_entities (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helptext (Transact-SQL) sp_helptext (Transact-SQL)
sp_refreshview (Transact-SQL) sp_refreshview (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
sys.views (Transact-SQL) sys.views (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
EVENTDATA (Transact-SQL)EVENTDATA (Transact-SQL)