인덱싱된 뷰 만들기Create Indexed Views

이 항목에서는 SQL Server 2017SQL Server 2017 을 사용하여 Transact-SQLTransact-SQL에서 인덱싱된 뷰를 만드는 방법에 대해 설명합니다.This topic describes how to create an indexed view in SQL Server 2017SQL Server 2017 by using Transact-SQLTransact-SQL. 뷰에 만들어지는 첫 번째 인덱스는 고유 클러스터형 인덱스여야 합니다.The first index created on a view must be a unique clustered index. 고유 클러스터형 인덱스가 만들어진 후에 비클러스터형 인덱스를 더 만들 수 있습니다.After the unique clustered index has been created, you can create more nonclustered indexes. 뷰에 고유 클러스터형 인덱스를 만들면 클러스터형 인덱스가 있는 테이블의 저장 방식과 마찬가지로 데이터베이스에 뷰가 저장되므로 쿼리 성능이 향상됩니다.Creating a unique clustered index on a view improves query performance because the view is stored in the database in the same way a table with a clustered index is stored. 쿼리 최적화 프로그램은 인덱싱된 뷰를 사용하여 쿼리 실행 속도를 높일 수 있습니다.The query optimizer may use indexed views to speed up the query execution. 최적화 프로그램이 인덱싱된 뷰를 대신 사용하므로 쿼리에서 해당 뷰를 참조할 필요가 없습니다.The view does not have to be referenced in the query for the optimizer to consider that view for a substitution.

시작하기 전에 Before You Begin

다음 단계는 인덱싱된 뷰를 만들고 성공적으로 구현하는 데 필요합니다.The following steps are required to create an indexed view and are critical to the successful implementation of the indexed view:

  1. 뷰에 참조될 기존의 모든 테이블에 대해 SET 옵션이 올바른지 확인합니다.Verify the SET options are correct for all existing tables that will be referenced in the view.

  2. 테이블 및 뷰를 만들기 전에 세션에 SET 옵션이 올바르게 설정되어 있는지 확인합니다.Verify that the SET options for the session are set correctly before you create any tables and the view.

  3. 뷰 정의가 결정적인지 확인합니다.Verify that the view definition is deterministic.

  4. WITH SCHEMABINDING 옵션을 사용하여 뷰를 만듭니다.Create the view by using the WITH SCHEMABINDING option.

  5. 뷰에 고유 클러스터형 인덱스를 만듭니다.Create the unique clustered index on the view.

인덱싱된 뷰에 필요한 SET 옵션 Required SET Options for Indexed Views

쿼리가 실행될 때 다른 SET 옵션이 활성화되어 있으면 같은 식을 계산해도 데이터베이스 엔진Database Engine 에서 다른 결과가 나올 수 있습니다.Evaluating the same expression can produce different results in the 데이터베이스 엔진Database Engine when different SET options are active when the query is executed. 예를 들어 SET 옵션 CONCAT_NULL_YIELDS_NULL이 ON으로 설정된 후 식 'abc' + NULL의 결과로 NULL 값이 반환됩니다.For example, after the SET option CONCAT_NULL_YIELDS_NULL is set to ON, the expression 'abc' + NULL returns the value NULL. 그러나 CONCAT_NULL_YIEDS_NULL을 OFF로 설정한 후 같은 식의 결과는 'abc'가 됩니다.However, after CONCAT_NULL_YIEDS_NULL is set to OFF, the same expression produces 'abc'.

뷰를 올바르게 유지하고 일관된 결과를 반환하게 하려면 인덱싱된 뷰는 몇 가지 SET 옵션에 대해 고정 값이 필요합니다.To make sure that the views can be maintained correctly and return consistent results, indexed views require fixed values for several SET options. 다음 테이블의 SET 옵션은 다음 상황이 발생할 때마다 필요한 값 열에 표시된 값으로 설정되어야 합니다.The SET options in the following table must be set to the values shown in the Required Value column whenever the following conditions occur:

  • 뷰와 뷰의 후속 인덱스가 생성됩니다.The view and subsequent indexes on the view are created.

  • 테이블을 만들 때 뷰에서 참조되는 기본 테이블입니다.The base tables referenced in the view at the time the table is created.

  • 인덱싱된 뷰에 참가하는 테이블에서 삽입, 업데이트 또는 삭제 작업이 수행됩니다.There is any insert, update, or delete operation performed on any table that participates in the indexed view. 이 요구 사항에는 대량 복사, 복제, 분산 쿼리 등의 작업이 포함됩니다.This requirement includes operations such as bulk copy, replication, and distributed queries.

  • 쿼리 최적화 프로그램에서 인덱싱된 뷰를 사용하여 쿼리 계획을 만듭니다.The indexed view is used by the query optimizer to produce the query plan.

    SET 옵션SET options 필요한 값Required value 기본 서버 값Default server value 기본값Default

    OLE DB 및 ODBC 값OLE DB and ODBC value
    기본값Default

    DB-Library 값DB-Library value
    ANSI_NULLSANSI_NULLS ONON ONON ONON OFFOFF
    ANSI_PADDINGANSI_PADDING ONON ONON ONON OFFOFF
    ANSI_WARNINGSANSI_WARNINGS ONON ONON ONON OFFOFF
    ARITHABORTARITHABORT ONON ONON OFFOFF OFFOFF
    CONCAT_NULL_YIELDS_NULLCONCAT_NULL_YIELDS_NULL ONON ONON ONON OFFOFF
    NUMERIC_ROUNDABORTNUMERIC_ROUNDABORT OFFOFF OFFOFF OFFOFF OFFOFF
    QUOTED_IDENTIFIERQUOTED_IDENTIFIER ONON ONON ONON OFFOFF

    ANSI_WARNINGS를 ON으로 설정하면 암시적으로 ARITHABORT가 ON으로 설정됩니다.Setting ANSI_WARNINGS to ON implicitly sets ARITHABORT to ON.

    OLE DB 또는 ODBC 서버 연결을 사용하는 경우 수정해야 하는 유일한 값은 ARITHABORT 설정입니다.If you are using an OLE DB or ODBC server connection, the only value that must be modified is the ARITHABORT setting. 모든 DB-Library 값은 sp_configure 를 사용하여 서버 수준에서 또는 SET 명령을 사용하여 응용 프로그램에서 올바르게 설정해야 합니다.All DB-Library values must be set correctly either at the server level by using sp_configure or from the application by using the SET command.

중요

서버의 데이터베이스에서 계산 열에 첫 번째로 인덱싱된 뷰 또는 인덱스가 만들어지면 바로 서버 차원에서 ARITHABORT 사용자 옵션을 ON으로 설정하는 것이 좋습니다.We strongly recommend that you set the ARITHABORT user option to ON server-wide as soon as the first indexed view or index on a computed column is created in any database on the server.

결정적 뷰Deterministic Views

인덱싱된 뷰의 정의는 결정적이어야 합니다.The definition of an indexed view must be deterministic. WHERE 및 GROUP BY 절뿐만 아니라 SELECT 목록의 모든 식이 결정적이면 뷰가 결정적입니다.A view is deterministic if all expressions in the select list, as well as the WHERE and GROUP BY clauses, are deterministic. 결정적 식은 특정 입력 값 집합을 사용하여 계산될 때마다 항상 같은 결과를 반환합니다.Deterministic expressions always return the same result any time they are evaluated with a specific set of input values. 결정적 함수만 결정적 식에 참여할 수 있습니다.Only deterministic functions can participate in deterministic expressions. 예를 들어 DATEADD 함수는 세 매개 변수에 지정된 인수 값 집합에 대해 항상 같은 결과를 반환하므로 결정적 함수입니다.For example, the DATEADD function is deterministic because it always returns the same result for any given set of argument values for its three parameters. GETDATE는 항상 같은 인수로 호출되지만 실행될 때마다 반환하는 값이 바뀌므로 비결정적 함수입니다.GETDATE is not deterministic because it is always invoked with the same argument, but the value it returns changes each time it is executed.

뷰 열이 결정적인지 여부를 확인하려면 COLUMNPROPERTY 함수의 IsDeterministic 속성을 사용합니다.To determine whether a view column is deterministic, use the IsDeterministic property of the COLUMNPROPERTY function. 스키마 바인딩되어 있는 뷰의 결정적 열이 정확한지 여부를 확인하려면 COLUMNPROPERTY 함수의 IsPrecise 속성을 사용합니다.To determine if a deterministic column in a view with schema binding is precise, use the IsPrecise property of the COLUMNPROPERTY function. COLUMNPROPERTY는 TRUE이면 1을 반환하고 FALSE이면 0을 반환하며 입력이 잘못되면 NULL을 반환합니다.COLUMNPROPERTY returns 1 if TRUE, 0 if FALSE, and NULL for input that is not valid. 이는 해당 열이 비결정적이거나 정확하지 않음을 의미합니다.This means the column is not deterministic or not precise.

식이 결정적인 경우에도 float 식이 포함되어 있으면 정확한 결과는 프로세서 아키텍처 또는 마이크로코드 버전에 따라 달라질 수 있습니다.Even if an expression is deterministic, if it contains float expressions, the exact result may depend on the processor architecture or version of microcode. 데이터 무결성을 보장하기 위해 이런 식은 인덱싱된 뷰의 키가 아닌 열로만 참여할 수 있습니다.To ensure data integrity, such expressions can participate only as non-key columns of indexed views. float 식이 없는 결정적 식을 정확하다고 합니다.Deterministic expressions that do not contain float expressions are called precise. 정확한 결정적 식만 인덱싱된 뷰의 WHERE 또는 GROUP BY 절과 키 열에 참여할 수 있습니다.Only precise deterministic expressions can participate in key columns and in WHERE or GROUP BY clauses of indexed views.

참고

인덱싱된 뷰는 임시 쿼리를 기반으로 사용할 수 없습니다( FOR SYSTEM_TIME 절을 사용하는 쿼리).Indexed views are not supported on top of temporal queries (queries that use FOR SYSTEM_TIME clause)

추가 요구 사항Additional Requirements

SET 옵션 및 결정적 함수 요구 사항 외에 다음 요구 사항을 충족해야 합니다.In addition to the SET options and deterministic function requirements, the following requirements must be met:

  • CREATE INDEX를 실행하는 사용자는 뷰의 소유자여야 합니다.The user that executes CREATE INDEX must be the owner of the view.

  • 인덱스를 만들 때 IGNORE_DUP_KEY 옵션은 OFF(기본 설정)로 설정되어야 합니다.When you create the index, the IGNORE_DUP_KEY option must be set to OFF (the default setting).

  • 테이블은 뷰 정의에서 schema.tablename 처럼 두 부분으로 구성된 이름으로 참조되어야 합니다.Tables must be referenced by two-part names, schema.tablename in the view definition.

  • 뷰에서 참조하는 사용자 정의 함수는 WITH SCHEMABINDING 옵션을 사용하여 만들어야 합니다.User-defined functions referenced in the view must be created by using the WITH SCHEMABINDING option.

  • 뷰에서 참조하는 사용자 정의 함수는 두 부분으로 구성된 이름 schema.function으로 참조되어야 합니다.Any user-defined functions referenced in the view must be referenced by two-part names, schema.function.

  • 사용자 정의 함수의 데이터 액세스 속성은 NO SQL이어야 하고 외부 액세스 속성은 NO여야 합니다.The data access property of a user-defined function must be NO SQL, and external access property must be NO.

  • CLR(공용 언어 런타임) 함수는 뷰의 SELECT 목록에 표시될 수 있지만 클러스터형 인덱스 키 정의의 일부일 수는 없습니다.Common language runtime (CLR) functions can appear in the select list of the view, but cannot be part of the definition of the clustered index key. CLR 함수는 뷰의 WHERE 절이나 뷰에서 JOIN 연산의 ON 절에 표시되지 않습니다.CLR functions cannot appear in the WHERE clause of the view or the ON clause of a JOIN operation in the view.

  • 뷰 정의에서 사용된 CLR 사용자 정의 형식의 메서드 및 CLR 함수의 속성을 다음 표와 같이 설정해야 합니다.CLR functions and methods of CLR user-defined types used in the view definition must have the properties set as shown in the following table.

    속성Property 참고Note
    DETERMINISTIC = TRUEDETERMINISTIC = TRUE Microsoft .NET Framework 메서드의 특성으로 명시적으로 선언되어야 합니다.Must be declared explicitly as an attribute of the Microsoft .NET Framework method.
    PRECISE = TRUEPRECISE = TRUE .NET Framework 메서드의 특성으로 명시적으로 선언되어야 합니다.Must be declared explicitly as an attribute of the .NET Framework method.
    DATA ACCESS = NO SQLDATA ACCESS = NO SQL DataAccess 특성을 DataAccessKind.None으로 설정하고 SystemDataAccess 특성을 SystemDataAccessKind.None으로 설정함으로써 결정됩니다.Determined by setting DataAccess attribute to DataAccessKind.None and SystemDataAccess attribute to SystemDataAccessKind.None.
    EXTERNAL ACCESS = NOEXTERNAL ACCESS = NO CLR 루틴의 경우 이 속성의 기본값은 NO입니다.This property defaults to NO for CLR routines.
  • 뷰는 WITH SCHEMABINDING 옵션을 사용하여 만들어야 합니다.The view must be created by using the WITH SCHEMABINDING option.

  • 뷰는 뷰와 동일한 데이터베이스의 기본 테이블만 참조해야 합니다.The view must reference only base tables that are in the same database as the view. 뷰는 다른 뷰를 참조할 수 없습니다.The view cannot reference other views.

  • 뷰 정의의 SELECT 문에는 다음 Transact-SQL 요소가 포함되지 않아야 합니다.The SELECT statement in the view definition must not contain the following Transact-SQL elements:

    COUNTCOUNT ROWSET 함수(OPENDATASOURCE, OPENQUERY, OPENROWSET 및 OPENXML)ROWSET functions (OPENDATASOURCE, OPENQUERY, OPENROWSET, AND OPENXML) OUTER 조인(LEFT, RIGHT 또는 FULL)OUTER joins (LEFT, RIGHT, or FULL)
    파생 테이블(FROM 절에서 SELECT 문을 지정하여 정의)Derived table (defined by specifying a SELECT statement in the FROM clause) 자체 조인Self-joins SELECT * 또는 SELECT table_name을 사용하여 열 지정Specifying columns by using SELECT * or SELECT *table_name.*
    DISTINCTDISTINCT STDEV, STDEVP, VAR, VARP 또는 AVGSTDEV, STDEVP, VAR, VARP, or AVG CTE(공통 테이블 식)Common table expression (CTE)
    float*, text, ntext, image, XML또는 filestreamfloat*, text, ntext, image, XML, or filestream columns 하위 쿼리Subquery 순위 함수 또는 집계 창 함수를 포함하는 OVER 절OVER clause, which includes ranking or aggregate window functions
    전체 텍스트 조건자(CONTAIN, FREETEXT)Full-text predicates (CONTAIN, FREETEXT) Null 허용 식을 참조하는 SUM 함수SUM function that references a nullable expression ORDER BYORDER BY
    CLR 사용자 정의 집계 함수CLR user-defined aggregate function 맨 위로 이동TOP CUBE, ROLLUP 또는 GROUPING SETS 연산자CUBE, ROLLUP, or GROUPING SETS operators
    MIN, MAXMIN, MAX UNION, EXCEPT 또는 INTERSECT 연산자UNION, EXCEPT, or INTERSECT operators TABLESAMPLETABLESAMPLE
    테이블 변수Table variables OUTER APPLY 또는 CROSS APPLYOUTER APPLY or CROSS APPLY PIVOT, UNPIVOTPIVOT, UNPIVOT
    스파스 열 집합Sparse column sets 인라인 또는 다중 문 테이블 반환 함수Inline or multi-statement table-valued functions OFFSETOFFSET
    CHECKSUM_AGGCHECKSUM_AGG

    *인덱싱된 뷰는 float 열을 포함할 수 있지만 이러한 열은 클러스터형 인덱스 키에 포함될 수 없습니다.*The indexed view can contain float columns; however, such columns cannot be included in the clustered index key.

  • GROUP BY가 있는 경우 VIEW 정의는 COUNT_BIG()을 포함해야 하며 HAVING은 포함할 수 없습니다.If GROUP BY is present, the VIEW definition must contain COUNT_BIG() and must not contain HAVING. 이러한 GROUP BY 제약 조건은 인덱싱된 뷰 정의에만 적용됩니다.These GROUP BY restrictions are applicable only to the indexed view definition. 쿼리는 이러한 GROUP BY 제약 조건을 충족하지 않는 경우에도 실행 계획에 인덱싱된 뷰를 사용할 수 있습니다.A query can use an indexed view in its execution plan even if it does not satisfy these GROUP BY restrictions.

  • 뷰 정의에 GROUP BY 절이 들어 있으면 고유 클러스터형 인덱스의 키는 GROUP BY 절에 지정된 열만 참조할 수 있습니다.If the view definition contains a GROUP BY clause, the key of the unique clustered index can reference only the columns specified in the GROUP BY clause.

권장 사항 Recommendations

인덱싱된 뷰의 datetimesmalldatetime 문자열 리터럴을 참조할 때 결정적 날짜 형식 스타일을 사용하여 리터럴을 원하는 날짜 유형으로 명시적으로 변환하는 것이 좋습니다.When you refer to datetime and smalldatetime string literals in indexed views, we recommend that you explicitly convert the literal to the date type you want by using a deterministic date format style. 결정적 날짜 형식 스타일 목록은 CAST 및 CONVERT(Transact-SQL)를 참조하세요.For a list of the date format styles that are deterministic, see CAST and CONVERT (Transact-SQL). 문자열을 datetime 또는 smalldatetime 으로 암시적으로 변환하는 작업과 관련된 식은 비결정적인 것으로 간주됩니다.Expressions that involve implicit conversion of character strings to datetime or smalldatetime are considered nondeterministic. 이는 서버 세션의 LANGUAGE 및 DATEFORMAT 설정에 따라 결과가 달라지기 때문입니다.This is because the results depend on the LANGUAGE and DATEFORMAT settings of the server session. 예를 들어 ' CONVERT (datetime, '30 listopad 1996', 113) ' 문자열이 다른 언어에서는 다른 월을 의미하므로listopad식의 결과는 LANGUAGE 설정에 따라 달라집니다.For example, the results of the expression CONVERT (datetime, '30 listopad 1996', 113) depend on the LANGUAGE setting because the string 'listopad' means different months in different languages. 마찬가지로 DATEADD(mm,3,'2000-12-01')식에서 SQL ServerSQL Server 는 DATEFORMAT 설정을 기준으로 '2000-12-01' 문자열을 해석합니다.Similarly, in the expression DATEADD(mm,3,'2000-12-01'), SQL ServerSQL Server interprets the string '2000-12-01' based on the DATEFORMAT setting.

데이터 정렬 간의 비유니코드 문자 데이터를 암시적으로 변환하는 작업도 비결정적인 것으로 간주됩니다.Implicit conversion of non-Unicode character data between collations is also considered nondeterministic.

고려 사항 Considerations

인덱싱된 뷰의 열에 대한 large_value_types_out_of_row 옵션의 설정은 기본 테이블의 해당 열에 대한 설정에서 상속됩니다.The setting of the large_value_types_out_of_row option of columns in an indexed view is inherited from the setting of the corresponding column in the base table. 이 값은 sp_tableoption을 통해 설정됩니다.This value is set by using sp_tableoption. 식으로부터 구성된 열의 기본 설정은 0으로서The default setting for columns formed from expressions is 0. 큰 값 유형이 행 내부에 저장됨을 의미합니다.This means that large value types are stored in-row.

인덱싱된 뷰는 분할된 테이블에서 만들 수 있으며 자신이 분할될 수 있습니다.Indexed views can be created on a partitioned table, and can themselves be partitioned.

데이터베이스 엔진Database Engine 에서 인덱싱된 뷰를 사용하지 않게 하려면 쿼리에 OPTION (EXPAND VIEW) 힌트를 포함합니다.To prevent the 데이터베이스 엔진Database Engine from using indexed views, include the OPTION (EXPAND VIEWS) hint on the query. 또한 위에 표시된 옵션을 하나라도 잘못 설정하면 최적화 프로그램에서 뷰의 인덱스를 사용할 수 없게 됩니다.Also, if any of the listed options are incorrectly set, this will prevent the optimizer from using the indexes on the views. OPTION (EXPAND VIEW) 힌트에 대한 자세한 내용은 SELECT(Transact-SQL)를 참조하세요.For more information about the OPTION (EXPAND VIEWS) hint, see SELECT (Transact-SQL).

뷰가 삭제되면 뷰에 있는 모든 인덱스도 삭제됩니다.All indexes on a view are dropped when the view is dropped. 클러스터형 인덱스가 삭제되면 뷰의 모든 비클러스터형 인덱스 및 자동 생성된 통계가 삭제됩니다.All nonclustered indexes and auto-created statistics on the view are dropped when the clustered index is dropped. 사용자가 만든 뷰의 통계는 유지됩니다.User-created statistics on the view are maintained. 비클러스터형 인덱스는 개별적으로 삭제될 수 있습니다.Nonclustered indexes can be individually dropped. 뷰에서 클러스터형 인덱스를 삭제하면 저장된 결과 집합도 삭제되고 최적화 프로그램이 표준 뷰와 같은 뷰의 처리 단계로 되돌아갑니다.Dropping the clustered index on the view removes the stored result set, and the optimizer returns to processing the view like a standard view.

테이블 및 뷰의 인덱스를 비활성화할 수 있습니다.Indexes on tables and views can be disabled. 테이블의 클러스터형 인덱스가 비활성화되면 테이블과 관련된 뷰의 인덱스도 비활성화됩니다.When a clustered index on a table is disabled, indexes on views associated with the table are also disabled.

보안 Security

사용 권한 Permissions

데이터베이스에는 CREATE VIEW 권한이 필요하고 뷰를 만들 구성표에는 ALTER 권한이 필요합니다.Requires CREATE VIEW permission in the database and ALTER permission on the schema in which the view is being created.

Transact-SQL 사용 Using Transact-SQL

인덱싱된 뷰를 만들려면To create an indexed view

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 예에서는 뷰를 만들고 이 뷰에 인덱스를 만듭니다.The example creates a view and an index on that view. 인덱싱된 뷰를 사용하는 두 개의 쿼리가 포함되어 있습니다.Two queries are included that use the indexed view.

    USE AdventureWorks2012;  
    GO  
    --Set the options to support indexed views.  
    SET NUMERIC_ROUNDABORT OFF;  
    SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT,  
        QUOTED_IDENTIFIER, ANSI_NULLS ON;  
    GO  
    --Create view with schemabinding.  
    IF OBJECT_ID ('Sales.vOrders', 'view') IS NOT NULL  
    DROP VIEW Sales.vOrders ;  
    GO  
    CREATE VIEW Sales.vOrders  
    WITH SCHEMABINDING  
    AS  
        SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Revenue,  
            OrderDate, ProductID, COUNT_BIG(*) AS COUNT  
        FROM Sales.SalesOrderDetail AS od, Sales.SalesOrderHeader AS o  
        WHERE od.SalesOrderID = o.SalesOrderID  
        GROUP BY OrderDate, ProductID;  
    GO  
    --Create an index on the view.  
    CREATE UNIQUE CLUSTERED INDEX IDX_V1   
        ON Sales.vOrders (OrderDate, ProductID);  
    GO  
    --This query can use the indexed view even though the view is   
    --not specified in the FROM clause.  
    SELECT SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev,   
        OrderDate, ProductID  
    FROM Sales.SalesOrderDetail AS od  
        JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID  
            AND ProductID BETWEEN 700 and 800  
            AND OrderDate >= CONVERT(datetime,'05/01/2002',101)  
    GROUP BY OrderDate, ProductID  
    ORDER BY Rev DESC;  
    GO  
    --This query can use the above indexed view.  
    SELECT  OrderDate, SUM(UnitPrice*OrderQty*(1.00-UnitPriceDiscount)) AS Rev  
    FROM Sales.SalesOrderDetail AS od  
        JOIN Sales.SalesOrderHeader AS o ON od.SalesOrderID=o.SalesOrderID  
            AND DATEPART(mm,OrderDate)= 3  
            AND DATEPART(yy,OrderDate) = 2002  
    GROUP BY OrderDate  
    ORDER BY OrderDate ASC;  
    GO  
    

    자세한 내용은 CREATE VIEW(Transact-SQL)를 참조하세요.For more information, see CREATE VIEW (Transact-SQL).

관련 항목:See Also

CREATE INDEX(Transact-SQL) CREATE INDEX (Transact-SQL)
SET ANSI_NULLS(Transact-SQL) SET ANSI_NULLS (Transact-SQL)
SET ANSI_PADDING(Transact-SQL) SET ANSI_PADDING (Transact-SQL)
SET ANSI_WARNINGS(Transact-SQL) SET ANSI_WARNINGS (Transact-SQL)
SET ARITHABORT(Transact-SQL) SET ARITHABORT (Transact-SQL)
SET CONCAT_NULL_YIELDS_NULL(Transact-SQL) SET CONCAT_NULL_YIELDS_NULL (Transact-SQL)
SET NUMERIC_ROUNDABORT(Transact-SQL) SET NUMERIC_ROUNDABORT (Transact-SQL)
SET QUOTED_IDENTIFIER(Transact-SQL)SET QUOTED_IDENTIFIER (Transact-SQL)