CREATE TABLE(Transact-SQL)CREATE TABLE (Transact-SQL)

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL ServerAzure SQL 데이터베이스Azure SQL Database에서 새 테이블을 만듭니다.Creates a new table in SQL ServerSQL Server and Azure SQL 데이터베이스Azure SQL Database.

중요

Azure SQL 데이터베이스 관리 되는 인스턴스,이 T-SQL 기능은 특정 동작이 변경 되었습니다.On Azure SQL Database Managed Instance, this T-SQL feature has certain behavior changes. 참조 SQL Server에서 Azure SQL 데이터베이스 관리 되는 인스턴스 T-SQL 차이점 모든 T-SQL 동작 변경 내용에 대 한 세부 정보에 대 한 합니다.See Azure SQL Database Managed Instance T-SQL differences from SQL Server for details for all T-SQL behavior changes.

참고

SQL 데이터 웨어하우스SQL Data Warehouse 구문은 CREATE TABLE(Azure SQL Data Warehouse)를 참조하세요.For SQL 데이터 웨어하우스SQL Data Warehouse syntax, see CREATE TABLE (Azure SQL Data Warehouse).

항목 링크 아이콘 Transact-SQL 구문 규칙Topic link icon Transact-SQL Syntax Conventions

간단한 구문Simple Syntax

--Simple CREATE TABLE Syntax (common if not using options)  
CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    ( { <column_definition> } [ ,...n ] )   
[ ; ]  

전체 구문Full Syntax

--Disk-Based CREATE TABLE Syntax  
CREATE TABLE   
    [ database_name . [ schema_name ] . | schema_name . ] table_name   
    [ AS FileTable ]  
    ( {   <column_definition>   
        | <computed_column_definition>    
        | <column_set_definition>   
        | [ <table_constraint> ]   
        | [ <table_index> ] }  
          [ ,...n ]    
          [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name   
             , system_end_time_column_name ) ]  
      )  
    [ ON { partition_scheme_name ( partition_column_name )   
           | filegroup   
           | "default" } ]   
    [ TEXTIMAGE_ON { filegroup | "default" } ]   
    [ FILESTREAM_ON { partition_scheme_name   
           | filegroup   
           | "default" } ]  
    [ WITH ( <table_option> [ ,...n ] ) ]  
[ ; ]  

<column_definition> ::=  
column_name <data_type>  
    [ FILESTREAM ]  
    [ COLLATE collation_name ]   
    [ SPARSE ]  
    [ MASKED WITH ( FUNCTION = ' mask_function ') ]  
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ]   
    [ IDENTITY [ ( seed,increment ) ]  
    [ NOT FOR REPLICATION ]   
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]   
    [ NULL | NOT NULL ]  
    [ ROWGUIDCOL ]  
    [ ENCRYPTED WITH   
        ( COLUMN_ENCRYPTION_KEY = key_name ,  
          ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED } ,   
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
        ) ]  
    [ <column_constraint> [ ...n ] ]   
    [ <column_index> ]  

<data type> ::=   
[ type_schema_name . ] type_name   
    [ ( precision [ , scale ] | max |   
        [ { CONTENT | DOCUMENT } ] xml_schema_collection ) ]   

<column_constraint> ::=   
[ CONSTRAINT constraint_name ]   
{     { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        [   
            WITH FILLFACTOR = fillfactor    
          | WITH ( < index_option > [ , ...n ] )   
        ]   
        [ ON { partition_scheme_name ( partition_column_name )   
            | filegroup | "default" } ]  

  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   

  | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
}   

<column_index> ::=   
 INDEX index_name [ CLUSTERED | NONCLUSTERED ]  
    [ WITH ( <index_option> [ ,... n ] ) ]  
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

<computed_column_definition> ::=  
column_name AS computed_column_expression   
[ PERSISTED [ NOT NULL ] ]  
[   
    [ CONSTRAINT constraint_name ]  
    { PRIMARY KEY | UNIQUE }  
        [ CLUSTERED | NONCLUSTERED ]  
        [   
            WITH FILLFACTOR = fillfactor   
          | WITH ( <index_option> [ , ...n ] )  
        ]  
        [ ON { partition_scheme_name ( partition_column_name )   
        | filegroup | "default" } ]  

    | [ FOREIGN KEY ]   
        REFERENCES referenced_table_name [ ( ref_column ) ]   
        [ ON DELETE { NO ACTION | CASCADE } ]   
        [ ON UPDATE { NO ACTION } ]   
        [ NOT FOR REPLICATION ]   

    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )   
]   

<column_set_definition> ::=  
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS  

< table_constraint > ::=  
[ CONSTRAINT constraint_name ]   
{   
    { PRIMARY KEY | UNIQUE }   
        [ CLUSTERED | NONCLUSTERED ]   
        (column [ ASC | DESC ] [ ,...n ] )   
        [   
            WITH FILLFACTOR = fillfactor   
           |WITH ( <index_option> [ , ...n ] )   
        ]  
        [ ON { partition_scheme_name (partition_column_name)  
            | filegroup | "default" } ]   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
        [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]   
        [ NOT FOR REPLICATION ]   
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )  



< table_index > ::=   
{  
    {  
      INDEX index_name [ CLUSTERED | NONCLUSTERED ]   
         (column_name [ ASC | DESC ] [ ,... n ] )   
    | INDEX index_name CLUSTERED COLUMNSTORE  
    | INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )  
    }  
    [ WITH ( <index_option> [ ,... n ] ) ]   
    [ ON { partition_scheme_name (column_name )   
         | filegroup_name  
         | default   
         }  
    ]   
    [ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]  

}   


<table_option> ::=  
{  
    [DATA_COMPRESSION = { NONE | ROW | PAGE }  
      [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
      [ , ...n ] ) ]]  
    [ FILETABLE_DIRECTORY = <directory_name> ]   
    [ FILETABLE_COLLATE_FILENAME = { <collation_name> | database_default } ]  
    [ FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = <constraint_name> ]  
    [ FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]  
    [ FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = <constraint_name> ]  
    [ SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name  
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] ]  
    [ REMOTE_DATA_ARCHIVE =   
      {   
          ON [ ( <table_stretch_options> [,...n] ) ]  
        | OFF ( MIGRATION_STATE = PAUSED )   
      }   
    ]  
}  

<table_stretch_options> ::=  
{  
     [ FILTER_PREDICATE = { null | table_predicate_function } , ]  
       MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }  
 }  

<index_option> ::=  
{   
    PAD_INDEX = { ON | OFF }   
  | FILLFACTOR = fillfactor   
  | IGNORE_DUP_KEY = { ON | OFF }   
  | STATISTICS_NORECOMPUTE = { ON | OFF }   
  | ALLOW_ROW_LOCKS = { ON | OFF}   
  | ALLOW_PAGE_LOCKS ={ ON | OFF}   
  | COMPRESSION_DELAY= {0 | delay [Minutes]}  
  | DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE }  
       [ ON PARTITIONS ( { <partition_number_expression> | <range> }   
       [ , ...n ] ) ]  
}  
<range> ::=   
<partition_number_expression> TO <partition_number_expression>  

      --Memory optimized CREATE TABLE Syntax  
CREATE TABLE  
    [database_name . [schema_name ] . | schema_name . ] table_name  
    ( { <column_definition>  
    | [ <table_constraint> ] [ ,... n ]  
    | [ <table_index> ]  
      [ ,... n ] }   
      [ PERIOD FOR SYSTEM_TIME ( system_start_time_column_name   
        , system_end_time_column_name ) ]  
)  
    [ WITH ( <table_option> [ ,... n ] ) ]  
 [ ; ]  

<column_definition> ::=  
column_name <data_type>  
    [ COLLATE collation_name ]  
    [ GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] ]   
    [ NULL | NOT NULL ]  
[  
    [ CONSTRAINT constraint_name ] DEFAULT memory_optimized_constant_expression ]  
    | [ IDENTITY [ ( 1, 1 ) ]  
]  
    [ <column_constraint> ]  
    [ <column_index> ]  

<data type> ::=  
 [type_schema_name . ] type_name [ (precision [ , scale ]) ]  

<column_constraint> ::=  
 [ CONSTRAINT constraint_name ]  
{   
  { PRIMARY KEY | UNIQUE }    
      {   NONCLUSTERED   
        | NONCLUSTERED HASH WITH (BUCKET_COUNT = bucket_count)   
      }   
  | [ FOREIGN KEY ]   
        REFERENCES [ schema_name . ] referenced_table_name [ ( ref_column ) ]   
  | CHECK ( logical_expression )   
}  

< table_constraint > ::=  
 [ CONSTRAINT constraint_name ]  
{    
   { PRIMARY KEY | UNIQUE }  
     {   
       NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])  
       | NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )   
                    }   
    | FOREIGN KEY   
        ( column [ ,...n ] )   
        REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]   
    | CHECK ( logical_expression )   
}  

<column_index> ::=  
  INDEX index_name  
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count)  }  

<table_index> ::=  
  INDEX index_name  
{   [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)   
  | [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )   
      [ ON filegroup_name | default ]  
  | CLUSTERED COLUMNSTORE [WITH ( COMPRESSION_DELAY = {0 | delay [Minutes]})]  
      [ ON filegroup_name | default ]  

}  

<table_option> ::=  
{  
    MEMORY_OPTIMIZED = ON   
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}  
  | SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name  
        [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]   

}  

인수Arguments

database_namedatabase_name
테이블이 생성된 데이터베이스의 이름입니다.Is the name of the database in which the table is created. database_name은 기존 데이터베이스 이름을 지정해야 합니다.database_name must specify the name of an existing database. database_name을 지정하지 않으면 기본적으로 현재 데이터베이스가 됩니다.If not specified, database_name defaults to the current database. 현재 연결에 대한 로그인은 database_name에 지정된 데이터베이스의 기존 사용자 ID와 연결되어야 하며 해당 사용자 ID는 CREATE TABLE 권한을 갖고 있어야 합니다.The login for the current connection must be associated with an existing user ID in the database specified by database_name, and that user ID must have CREATE TABLE permissions.

schema_nameschema_name
새 테이블이 속한 스키마의 이름입니다.Is the name of the schema to which the new table belongs.

table_nametable_name
새 테이블의 이름입니다.Is the name of the new table. 테이블 이름은 식별자에 적용되는 규칙을 따라야 합니다.Table names must follow the rules for identifiers. 로컬 임시 테이블 이름(단일 숫자 기호(#)가 접두사로 붙은 이름이며 최대 116자)을 제외하면 table_name은 최대 128자가 될 수 있습니다.table_name can be a maximum of 128 characters, except for local temporary table names (names prefixed with a single number sign (#)) that cannot exceed 116 characters.

AS FileTableAS FileTable

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

새 테이블을 FileTable로 만듭니다.Creates the new table as a FileTable. FileTable에는 고정 스키마가 있으므로 열을 지정하지 않아도 됩니다.You do not specify columns because a FileTable has a fixed schema. FileTables 기능에 대한 자세한 내용은 FileTables (SQL Server)를 참조하세요.For more information about FileTables, see FileTables (SQL Server).

column_namecolumn_name
computed_column_expressioncomputed_column_expression
계산 열의 값을 정의하는 식입니다.Is an expression that defines the value of a computed column. 계산 열은 해당 열에 PERSISTED 표시가 없는 한 테이블에 물리적으로 저장되지 않는 가상의 열입니다.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. 이 열은 같은 테이블의 다른 열을 사용하는 식에서 계산됩니다.The column is computed from an expression that uses other columns in the same table. 예를 들어 계산 열은 cost AS price * qty 정의를 가질 수 있습니다. 식은 계산되지 않은 열 이름, 상수, 함수, 변수 및 이러한 요소를 하나 이상의 연산자로 연결한 조합이 될 수 있습니다.For example, a computed column can have the definition: cost AS price * qty. The expression can be a noncomputed column name, constant, function, variable, and any combination of these connected by one or more operators. 식은 하위 쿼리가 되거나 별칭 데이터 형식을 포함할 수 없습니다.The expression cannot be a subquery or contain alias data types.

계산 열은 SELECT 목록, WHERE 절, ORDER BY 절 또는 정규식을 사용할 수 있는 다른 위치에서 사용할 수 있습니다. 단, 다음과 같은 경우는 예외입니다.Computed columns can be used in select lists, WHERE clauses, ORDER BY clauses, or any other locations in which regular expressions can be used, with the following exceptions:

  • FOREIGN KEY 또는 CHECK 제약 조건에 참여하려면 계산 열이 PERSISTED로 표시되어야 합니다.Computed columns must be marked PERSISTED to participate in a FOREIGN KEY or CHECK constraint.

  • 계산 열 값이 결정적 식에 의해 정의되고 결과의 데이터 형식이 인덱스 열에 허용되는 경우에는 계산 열을 인덱스의 키 열이나 PRIMARY KEY 또는 UNIQUE 제약 조건의 일부로 사용할 수 있습니다.A computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns.

    예를 들어 테이블에 ab라는 정수 열이 있을 때 계산 열 a+b는 인덱싱할 수 있지만 계산 열 a+DATEPART(dd, GETDATE()) 는 다음 호출 시 값이 바뀌므로 인덱싱할 수 없습니다.For example, if the table has integer columns a and b, the computed column a+b may be indexed, but computed column a+DATEPART(dd, GETDATE()) cannot be indexed because the value may change in subsequent invocations.

  • 계산 열은 INSERT 또는 UPDATE 문의 대상이 될 수 없습니다.A computed column cannot be the target of an INSERT or UPDATE statement.

참고

테이블의 각 행은 계산 열과 연관된 열에 대해 다른 값을 가질 수 있습니다. 따라서 계산 열은 각 행에 대해 동일한 값을 갖지 않습니다.Each row in a table can have different values for columns that are involved in a computed column; therefore, the computed column may not have the same value for each row.

계산 열의 Null 허용 여부는 사용되는 식을 바탕으로 데이터베이스 엔진Database Engine에서 자동으로 결정합니다.Based on the expressions that are used, the nullability of computed columns is determined automatically by the 데이터베이스 엔진Database Engine. 대부분 식의 결과는 언더플로 또는 오버플로에 의한 Null 결과를 생성할 수 있으므로 Null이 허용되지 않는 열만 사용하더라도 결국 식은 Null을 허용하는 것으로 간주됩니다.The result of most expressions is considered nullable even if only nonnullable columns are present, because possible underflows or overflows also produce NULL results. AllowsNull 속성과 함께 COLUMNPROPERTY 함수를 사용하여 테이블에 있는 계산 열의 Null 허용 여부를 확인합니다.Use the COLUMNPROPERTY function with the AllowsNull property to investigate the nullability of any computed column in a table. Null을 허용하는 식은 check_expression 상수로 ISNULL을 지정하여 NULL을 허용하지 않는 식으로 바꿀 수 있습니다. 이때 이 상수는 NULL 결과를 대체하는 Null이 아닌 값입니다.An expression that is nullable can be turned into a nonnullable one by specifying ISNULL with the check_expression constant, where the constant is a nonnull value substituted for any NULL result. CLR(공용 언어 런타임) 사용자 정의 형식의 식을 바탕으로 한 계산 열에는 해당 형식에 대한 REFERENCES 권한이 필요합니다.REFERENCES permission on the type is required for computed columns based on common language runtime (CLR) user-defined type expressions.

PERSISTEDPERSISTED
SQL Server 데이터베이스 엔진SQL Server Database Engine이 계산된 값을 테이블에 물리적으로 저장하고 계산 열이 종속된 다른 열이 업데이트되면 해당 값을 업데이트하도록 지정합니다.Specifies that the SQL Server 데이터베이스 엔진SQL Server Database Engine will physically store the computed values in the table, and update the values when any other columns on which the computed column depends are updated. 계산 열을 PERSISTED로 표시하면 결정적이지만 정확하지는 않은 계산 열에 인덱스를 만들 수 있습니다.Marking a computed column as PERSISTED lets you create an index on a computed column that is deterministic, but not precise. 자세한 내용은 Indexes on Computed Columns을 참조하세요.For more information, see Indexes on Computed Columns. 분할된 테이블의 분할 열로 사용되는 계산 열은 명시적으로 PERSISTED로 표시해야 합니다.Any computed columns that are used as partitioning columns of a partitioned table must be explicitly marked PERSISTED. PERSISTED를 지정할 때 computed_column_expression은 결정적이어야 합니다.computed_column_expression must be deterministic when PERSISTED is specified.

ON { partition_scheme | filegroup | " default " }ON { partition_scheme | filegroup | " default " }

테이블이 저장된 파티션 구성표 또는 파일 그룹을 지정합니다.Specifies the partition scheme or filegroup on which the table is stored. partition_scheme을 지정하면 해당 테이블은 partition_scheme에 지정된 하나 이상의 파일 그룹 집합에 파티션이 저장되는 분할된 테이블이 됩니다.If partition_scheme is specified, the table is to be a partitioned table whose partitions are stored on a set of one or more filegroups specified in partition_scheme. filegroup을 지정한 경우에는 테이블이 명명된 파일 그룹에 저장됩니다.If filegroup is specified, the table is stored in the named filegroup. 파일 그룹은 데이터베이스 내에 있어야 합니다.The filegroup must exist within the database. " default " 를 지정하거나 ON을 전혀 지정하지 않으면 기본 파일 그룹에 테이블이 저장됩니다.If " default " is specified, or if ON is not specified at all, the table is stored on the default filegroup. CREATE TABLE에 지정된 테이블의 저장 메커니즘은 곧이어 변경할 수 없습니다.The storage mechanism of a table as specified in CREATE TABLE cannot be subsequently altered.

ON {partition_scheme | filegroup | " default "}는 PRIMARY KEY나 UNIQUE 제약 조건에도 지정할 수 있습니다.ON {partition_scheme | filegroup | " default "} can also be specified in a PRIMARY KEY or UNIQUE constraint. 이러한 제약 조건은 인덱스를 만듭니다.These constraints create indexes. filegroup을 지정한 경우에는 인덱스가 명명된 파일 그룹에 저장됩니다.If filegroup is specified, the index is stored in the named filegroup. " default " 를 지정하거나 ON을 전혀 지정하지 않으면 테이블과 동일한 파일 그룹에 인덱스가 저장됩니다.If " default " is specified, or if ON is not specified at all, the index is stored in the same filegroup as the table. PRIMARY KEY 또는 UNIQUE 제약 조건이 클러스터형 인덱스를 만드는 경우에는 테이블에 대한 데이터 페이지가 인덱스와 동일한 파일 그룹에 저장됩니다.If the PRIMARY KEY or UNIQUE constraint creates a clustered index, the data pages for the table are stored in the same filegroup as the index. CLUSTERED를 지정하거나 아니면 제약 조건이 클러스터형 인덱스를 만들고 테이블 정의의 partition_scheme 또는 filegroup과는 다르게 partition_scheme을 지정하거나 그 반대인 경우에는 제약 조건 정의만 유지하고 나머지는 무시합니다.If CLUSTERED is specified or the constraint otherwise creates a clustered index, and a partition_scheme is specified that differs from the partition_scheme or filegroup of the table definition, or vice-versa, only the constraint definition will be honored, and the other will be ignored.

참고

이 컨텍스트에서 default는 키워드가 아니라In this context, default is not a keyword. 이것은 기본 파일 그룹에 대한 식별자이며 ON " default " 또는 ON [ default ] 와 같이 구분되어야 합니다.It is an identifier for the default filegroup and must be delimited, as in ON " default " or ON [ default ]. " default " 를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다.If " default " is specified, the QUOTED_IDENTIFIER option must be ON for the current session. 이 값은 기본 설정입니다.This is the default setting. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

참고

분할된 테이블을 만든 후에는 테이블의 LOCK_ESCALATION 옵션을 AUTO로 설정하십시오.After you create a partitioned table, consider setting the LOCK_ESCALATION option for the table to AUTO. 이렇게 하면 테이블 수준이 아닌 파티션(HoBT) 수준으로 잠금이 에스컬레이션되도록 하여 동시성을 향상시킬 수 있습니다.This can improve concurrency by enabling locks to escalate to partition (HoBT) level instead of the table. 자세한 내용은 ALTER TABLE(Transact-SQL)을 참조하세요.For more information, see ALTER TABLE (Transact-SQL).

TEXTIMAGE_ON { filegroup| " default " }TEXTIMAGE_ON { filegroup| " default " }
지정된 파일 그룹에 text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max) 및 CLR 사용자 정의 형식 열(기하 도형 및 지리 포함)이 저장되어 있음을 나타냅니다.Indicates that the text, ntext, image, xml, varchar(max), nvarchar(max), varbinary(max), and CLR user-defined type columns (including geometry and geography) are stored on the specified filegroup.

테이블에 큰 값 열이 없는 경우에는 TEXTIMAGE_ON이 허용되지 않습니다.TEXTIMAGE_ON is not allowed if there are no large value columns in the table. partition_scheme을 지정하면 TEXTIMAGE_ON을 지정할 수 없습니다.TEXTIMAGE_ON cannot be specified if partition_scheme is specified. " default " 를 지정하거나 TEXTIMAGE_ON을 전혀 지정하지 않으면 큰 값 열이 기본 파일 그룹에 저장됩니다.If " default " is specified, or if TEXTIMAGE_ON is not specified at all, the large value columns are stored in the default filegroup. CREATE TABLE에 지정된 큰 값 열 데이터를 저장한 후에는 곧이어 변경할 수 없습니다.The storage of any large value column data specified in CREATE TABLE cannot be subsequently altered.

참고

Varchar(max), nvarchar(max), varbinary(max), xml 및 큰 UDT 값은 레코드에 맞는 한 최대 8000바이트까지 데이터 행에 직접 저장됩니다.Varchar(max), nvarchar(max), varbinary(max), xml and large UDT values are stored directly in the data row, up to a limit of 8000 bytes and as long as the value can fit the record. 값이 레코드에 맞지 않으면 포인터는 행 내부에 저장되고 나머지는 행 외부 LOB 저장 공간에 저장됩니다.If the value does not fit in the record, a pointer is sorted in-row and the rest is stored out of row in the LOB storage space. 0이 기본값입니다.0 is the default value. TEXTIMAGE_ON은 "LOB 저장 공간"의 위치만 변경하며, 데이터가 행 내부에 저장되는 경우 아무 영향도 주지 않습니다.TEXTIMAGE_ON only changes the location of the "LOB storage space", it does not affect when data is stored in-row. sp_tableoption의 large value types out of row 옵션을 사용하여 전체 LOB 값을 행 외부에 저장합니다.Use large value types out of row option of sp_tableoption to store the entire LOB value out of the row.

참고

이 컨텍스트에서 default는 키워드가 아니라In this context, default is not a keyword. 기본 파일 그룹에 대한 식별자이며 TEXTIMAGE_ON " default " 또는 TEXTIMAGE_ON [ default ] 와 같이 구분되어야 합니다.It is an identifier for the default filegroup and must be delimited, as in TEXTIMAGE_ON " default " or TEXTIMAGE_ON [ default ]. " default " 를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다.If " default " is specified, the QUOTED_IDENTIFIER option must be ON for the current session. 이 값은 기본 설정입니다.This is the default setting. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

FILESTREAM_ON { partition_scheme_name | filegroup | " default " } 적용 대상: SQL ServerSQL Server.FILESTREAM_ON { partition_scheme_name | filegroup | " default " } Applies to: SQL ServerSQL Server.

FILESTREAM 데이터의 파일 그룹을 지정합니다.Specifies the filegroup for FILESTREAM data.

테이블에 FILESTREAM 데이터가 포함되어 있고 테이블이 분할된 경우에는 FILESTREAM_ON 절을 포함해야 하며 이 절에서 FILESTREAM 파일 그룹의 파티션 구성표를 지정해야 합니다.If the table contains FILESTREAM data and the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups. 이 파티션 구성표는 테이블의 파티션 구성표와 동일한 파티션 함수 및 파티션 열을 사용해야 합니다. 그렇지 않으면 오류가 발생합니다.This partition scheme must use the same partition function and partition columns as the partition scheme for the table; otherwise, an error is raised.

테이블이 분할되지 않은 경우에는 FILESTREAM 열을 분할할 수 없습니다.If the table is not partitioned, the FILESTREAM column cannot be partitioned. 테이블의 FILESTREAM 데이터는 단일 파일 그룹에 저장되어야 합니다.FILESTREAM data for the table must be stored in a single filegroup. 이 파일 그룹은 FILESTREAM_ON 절에 지정됩니다.This filegroup is specified in the FILESTREAM_ON clause.

테이블이 분할되지 않고 FILESTREAM_ON 절이 지정되지 않은 경우에는 DEFAULT 속성이 설정된 FILESTREAM 파일 그룹이 사용됩니다.If the table is not partitioned and the FILESTREAM_ON clause is not specified, the FILESTREAM filegroup that has the DEFAULT property set is used. FILESTREAM 파일 그룹이 없으면 오류가 발생합니다.If there is no FILESTREAM filegroup, an error is raised.

  • ON 및 TEXTIMAGE_ON과 마찬가지로 FILESTREAM_ON에 대해 CREATE TABLE을 사용하여 설정한 값은 다음과 같은 경우를 제외하고 변경할 수 없습니다.As with ON and TEXTIMAGE_ON, the value set by using CREATE TABLE for FILESTREAM_ON cannot be changed, except in the following cases:

  • CREATE INDEX 문은 힙을 클러스터형 인덱스로 변환합니다.A CREATE INDEX statement converts a heap into a clustered index. 이 경우 다른 FILESTREAM 파일 그룹, 파티션 구성표 또는 NULL을 지정할 수 있습니다.In this case, a different FILESTREAM filegroup, partition scheme, or NULL can be specified.

  • DROP INDEX 문은 클러스터형 인덱스를 힙으로 변환합니다.A DROP INDEX statement converts a clustered index into a heap. 이 경우 다른 FILESTREAM 파일 그룹, 파티션 구성표 또는 " default " 를 지정할 수 있습니다.In this case, a different FILESTREAM filegroup, partition scheme, or " default " can be specified.

    FILESTREAM_ON <filegroup> 절의 파일 그룹이나 파티션 구성표에 명명되어 있는 각 FILESTREAM 파일 그룹에는 파일 그룹에 대해 정의된 파일이 하나 포함되어 있어야 합니다.The filegroup in the FILESTREAM_ON <filegroup> clause, or each FILESTREAM filegroup that is named in the partition scheme, must have one file defined for the filegroup. 이 파일은 CREATE DATABASE 또는 ALTER DATABASE 문을 사용하여 정의해야 합니다. 그러지 않으면 오류가 발생합니다.This file must be defined by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

    관련 FILESTREAM 토픽은 Binary Large Object (Blob) Data (SQL Server)를 참조하세요.For related FILESTREAM topics, see Binary Large Object (Blob) Data (SQL Server).

    [ type_schema_name. ] type_name[ type_schema_name. ] type_name
    열의 데이터 형식과 열이 속한 스키마를 지정합니다.Specifies the data type of the column, and the schema to which it belongs. 디스크 기반 테이블의 데이터 형식은 다음 중 하나일 수 있습니다.For disk-based tables, the data type can be one of the following:

  • 시스템 데이터 형식입니다.A system data type.

  • SQL ServerSQL Server 시스템 데이터 형식을 기반으로 하는 별칭 형식.An alias type based on a SQL ServerSQL Server system data type. 별칭 데이터 형식은 CREATE TYPE 문으로 만들어진 다음 테이블 정의에 사용됩니다.Alias data types are created with the CREATE TYPE statement before they can be used in a table definition. 별칭 데이터 형식에 대한 NULL 또는 NOT NULL 할당은 CREATE TABLE 문 중에서 덮어쓸 수 있지만The NULL or NOT NULL assignment for an alias data type can be overridden during the CREATE TABLE statement. 길이 지정은 변경할 수 없습니다. 즉, CREATE TABLE 문에서 별칭 데이터 형식의 길이를 지정할 수 없습니다.However, the length specification cannot be changed; the length for an alias data type cannot be specified in a CREATE TABLE statement.

  • CLR 사용자 정의 형식.A CLR user-defined type. CLR 사용자 정의 데이터 형식은 CREATE TYPE 문으로 만들어진 다음 테이블 정의에서 사용됩니다.CLR user-defined types are created with the CREATE TYPE statement before they can be used in a table definition. CLR 사용자 정의 형식으로 열을 만들려면 해당 형식에 대한 REFERENCES 권한이 필요합니다.To create a column on CLR user-defined type, REFERENCES permission is required on the type.

    type_schema_name을 지정하지 않으면 SQL Server 데이터베이스 엔진SQL Server Database Engine에서는 다음 순서로 type_name을 참조합니다.If type_schema_name is not specified, the SQL Server 데이터베이스 엔진SQL Server Database Engine references type_name in the following order:

  • SQL ServerSQL Server 시스템 데이터 형식The SQL ServerSQL Server system data type.

  • 현재 데이터베이스에 있는 현재 사용자의 기본 스키마The default schema of the current user in the current database.

  • 현재 데이터베이스의 dbo 스키마The dbo schema in the current database.

    메모리 최적화 테이블에 대해 지원되는 시스템 형식의 목록은 메모리 내 OLTP에 지원되는 데이터 형식을 참조하세요.For memory-optimized tables, see Supported Data Types for In-Memory OLTP for a list of supported system types.

    전체 자릿수precision
    지정된 데이터 형식의 전체 자릿수입니다.Is the precision for the specified data type. 유효한 전체 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이를 참조하세요.For more information about valid precision values, see Precision, Scale, and Length.

    scalescale
    지정된 데이터 형식의 소수 자릿수입니다.Is the scale for the specified data type. 유효한 소수 자릿수 값에 대한 자세한 내용은 전체 자릿수, 소수 자릿수 및 길이를 참조하세요.For more information about valid scale values, see Precision, Scale, and Length.

    maxmax
    2^31바이트의 문자와 이진 데이터 및 2^30바이트의 유니코드 데이터를 저장하기 위한 varchar, nvarcharvarbinary 데이터 형식에만 적용됩니다.Applies only to the varchar, nvarchar, and varbinary data types for storing 2^31 bytes of character and binary data, and 2^30 bytes of Unicode data.

    CONTENTCONTENT
    column_name에 있는 xml 데이터 형식의 각 인스턴스가 여러 개의 최상위 요소를 포함할 수 있도록 지정합니다.Specifies that each instance of the xml data type in column_name can contain multiple top-level elements. CONTENT는 xml 데이터 형식에만 적용되며 xml_schema_collection도 지정한 경우에만 지정할 수 있습니다.CONTENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified. 지정하지 않은 경우에는 CONTENT가 기본 동작입니다.If not specified, CONTENT is the default behavior.

    DOCUMENTDOCUMENT
    column_name에 있는 xml 데이터 형식의 각 인스턴스가 최상위 요소를 하나만 포함할 수 있도록 지정합니다.Specifies that each instance of the xml data type in column_name can contain only one top-level element. DOCUMENT는 xml 데이터 형식에만 적용되며 xml_schema_collection도 지정한 경우에만 지정할 수 있습니다.DOCUMENT applies only to the xml data type and can be specified only if xml_schema_collection is also specified.

    xml_schema_collectionxml_schema_collection
    XML 스키마 컬렉션과의 연결을 위해 xml 데이터 형식에만 적용됩니다.Applies only to the xml data type for associating an XML schema collection with the type. 스키마에 xml 열을 입력하기 전에 먼저 CREATE XML SCHEMA COLLECTION을 사용하여 데이터베이스에 해당 스키마를 만들어야 합니다.Before typing an xml column to a schema, the schema must first be created in the database by using CREATE XML SCHEMA COLLECTION.

    DEFAULTDEFAULT
    삽입 중에 값이 명시적으로 지정되지 않은 경우에 열에 대해 제공되는 값을 지정합니다.Specifies the value provided for the column when a value is not explicitly supplied during an insert. DEFAULT 정의는 timestamp로 정의되거나 IDENTITY 속성이 있는 열을 제외한 모든 열에 적용할 수 있습니다.DEFAULT definitions can be applied to any columns except those defined as timestamp, or those with the IDENTITY property. 사용자 정의 형식 열에 대해 기본값을 지정할 경우 constant_expression에서 해당 사용자 정의 형식으로 암시적으로 변환할 수 있어야 합니다.If a default value is specified for a user-defined type column, the type should support an implicit conversion from constant_expression to the user-defined type. DEFAULT 정의는 테이블이 삭제될 때 제거됩니다.DEFAULT definitions are removed when the table is dropped. 문자열과 같은 상수 값, 스칼라 함수(시스템 함수, 사용자 정의 함수 또는 CLR 함수) 또는 NULL만 기본값으로 사용할 수 있습니다.Only a constant value, such as a character string; a scalar function (either a system, user-defined, or CLR function); or NULL can be used as a default. 이전 버전의 SQL ServerSQL Server와 호환성을 유지하기 위해 DEFAULT에 제약 조건 이름을 할당할 수 있습니다.To maintain compatibility with earlier versions of SQL ServerSQL Server, a constraint name can be assigned to a DEFAULT.

    constant_expressionconstant_expression
    열의 기본값으로 사용되는 상수, NULL 또는 시스템 함수입니다.Is a constant, NULL, or a system function that is used as the default value for the column.

    memory_optimized_constant_expressionmemory_optimized_constant_expression
    열의 기본값으로 사용되는 상수, NULL 또는 시스템 함수입니다.Is a constant, NULL, or a system function that is supported in used as the default value for the column. 고유하게 컴파일된 저장 프로시저에서 지원되어야 합니다.Must be supported in natively compiled stored procedures. 고유하게 컴파일된 저장 프로시저의 기본 제공 함수에 대한 자세한 내용은 고유하게 컴파일된 T-SQL 모듈에 대해 지원되는 기능을 참조하세요.For more information about built-in functions in natively compiled stored procedures, see Supported Features for Natively Compiled T-SQL Modules.

    IDENTITYIDENTITY
    새 열이 ID 열임을 나타냅니다.Indicates that the new column is an identity column. 테이블에 새 행이 추가되면 데이터베이스 엔진Database Engine은 열에 대해 고유한 증가값을 제공합니다.When a new row is added to the table, the 데이터베이스 엔진Database Engine provides a unique, incremental value for the column. ID 열은 일반적으로 PRIMARY KEY 제약 조건과 함께 사용되어 테이블에 대한 고유한 행 식별자 역할을 합니다.Identity columns are typically used with PRIMARY KEY constraints to serve as the unique row identifier for the table. IDENTITY 속성은 tinyint, smallint, int, bigint, decimal(p,0) 또는 numeric(p,0) 열에 할당할 수 있습니다.The IDENTITY property can be assigned to tinyint, smallint, int, bigint, decimal(p,0), or numeric(p,0) columns. ID 열은 테이블당 하나만 만들 수 있습니다.Only one identity column can be created per table. ID 열에는 바인딩된 기본값 및 DEFAULT 제약 조건을 사용할 수 없습니다.Bound defaults and DEFAULT constraints cannot be used with an identity column. 초기값과 증가값은 둘 다 지정하거나 또는 둘 다 지정하지 않아야 합니다.Both the seed and increment or neither must be specified. 둘 다 지정하지 않은 경우에는 기본값 (1,1)이 사용됩니다.If neither is specified, the default is (1,1).

    메모리 최적화 테이블에서 seedincrement에 대해 모두 허용되는 유일한 값은 1이며, (1,1)은 seedincrement의 기본값입니다.In a memory-optimized table, the only allowed value for both seed and increment is 1; (1,1) is the default for seed and increment.

    seedseed
    테이블에 로드되는 첫 번째 행에 사용하는 값입니다.Is the value used for the very first row loaded into the table.

    incrementincrement
    로드된 이전 행의 ID 값에 추가되는 증가값입니다.Is the incremental value added to the identity value of the previous row loaded.

    NOT FOR REPLICATIONNOT FOR REPLICATION
    CREATE TABLE 문에서 IDENTITY 속성, FOREIGN KEY 제약 조건 및 CHECK 제한 조건에 대해 NOT FOR REPLICATION 절을 지정할 수 있습니다.In the CREATE TABLE statement, the NOT FOR REPLICATION clause can be specified for the IDENTITY property, FOREIGN KEY constraints, and CHECK constraints. IDENTITY 속성에 이 절을 지정하면 복제 에이전트가 삽입 작업을 수행할 때 ID 열의 값이 증가하지 않습니다.If this clause is specified for the IDENTITY property, values are not incremented in identity columns when replication agents perform inserts. 제약 조건에 대해 이 절을 지정하면 복제 에이전트가 삽입, 업데이트 또는 삭제 작업을 수행할 때 해당 제약 조건이 강제로 적용되지 않습니다.If this clause is specified for a constraint, the constraint is not enforced when replication agents perform insert, update, or delete operations.

    GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]
    적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

    시스템이 지정된 datetime2 열을 사용하여 레코드가 유효한 시작 시간 또는 레코드가 유효한 종료 시간을 기록하도록 지정합니다.Specifies that a specified datetime2 column will be used by the system to record either the start time for which a record is valid or the end time for which a record is valid. 열은 NOT NULL로 지정해야 합니다.The column must be defined as NOT NULL. 이들을 NULL로 지정하려고 하면 시스템 오류가 발생합니다.If you attempt to specify them as NULL, the system will throw an error. 기간 열에 NOT NULL을 명시적으로 지정하지 않으면 시스템은 기본적으로 해당 열을 NOT NULL로 정의합니다.If you do not explicitly specify NOT NULL for a period column, the system will define the column as NOT NULL by default. PERIOD FOR SYSTEM_TIME 및 WITH SYSTEM_VERSIONING = ON 인수와 함께 이 인수를 사용하여 테이블에 대한 시스템 버전 관리를 활성화합니다.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. 자세한 내용은 Temporal Tables을 참조하세요.For more information, see Temporal Tables.

    기간 열 한 개 또는 두 개를 모두 HIDDEN 플래그로 표시하여 *SELECT * FROM***<table> 이 이러한 열에 대해 값을 반환하지 않도록 해당 열을 암시적으로 숨길 수 있습니다.You can mark one or both period columns with HIDDEN flag to implicitly hide these columns such that *SELECT * FROM***<table> does not return a value for those columns. 기본적으로 기간 열은 숨겨지지 않습니다.By default, period columns are not hidden. 사용하려면 임시 테이블을 직접 참조하는 모든 쿼리에 숨겨진 열을 명시적으로 포함해야 합니다.In order to be used, hidden columns must be explicitly included in all queries that directly reference the temporal table. 기존 기간 열의 HIDDEN 특성을 변경하려면 PERIOD를 삭제하고 다른 숨겨진 플래그를 사용하여 다시 만들어야 합니다.To change the HIDDEN attribute for an existing period column, PERIOD must be dropped and recreated with a different hidden flag.

    INDEX *index_name* [ CLUSTERED | NONCLUSTERED ] (*column_name* [ ASC | DESC ] [ ,... *n* ] )

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

테이블에 인덱스를 만들도록 지정합니다.Specifies to create an index on the table. 이는 클러스터형 인덱스 또는 비클러스터형 인덱스일 수 있습니다.This can be a clustered index, or a nonclustered index. 인덱스는 나열된 열을 포함하며 데이터를 오름차순 또는 내림차순으로 정렬합니다.The index will contain the columns listed, and will sort the data in either ascending or descending order.

INDEX index_name CLUSTERED COLUMNSTOREINDEX index_name CLUSTERED COLUMNSTORE

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

전체 테이블을 클러스터형 columnstore 인덱스를 포함한 열 형식으로 저장하도록 지정합니다.Specifies to store the entire table in columnar format with a clustered columnstore index. 이는 언제나 테이블의 모든 열을 포함합니다.This always includes all columns in the table. 데이터는 행이 columnstore의 압축 이점을 얻도록 구성되므로 알파벳순 또는 숫자 순서로 정렬되지 않습니다.The data is not sorted in alphabetical or numeric order since the rows are organized to gain columnstore compression benefits.

INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )INDEX index_name [ NONCLUSTERED ] COLUMNSTORE (column_name [ ,... n ] )

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

테이블에 비클러스터형 columnstore 인덱스를 만들도록 지정합니다.Specifies to create a nonclustered columnstore index on the table. 기본 테이블은 rowstore 힙 또는 클러스터형 인덱스이거나 클러스터형 columnstore 인덱스일 수 있습니다.The underlying table can be a rowstore heap or clustered index, or it can be a clustered columnstore index. 모든 경우 테이블에 비클러스터형 columnstore 인덱스를 만들면 인덱스 열에 대한 데이터의 두 번째 복사본이 저장됩니다.In all cases, creating a nonclustered columnstore index on a table stores a second copy of the data for the columns in the index.

비클러스터형 columnstore 인덱스는 클러스터형 columnstore 인덱스로 저장 및 관리됩니다.The nonclustered columnstore index is stored and managed as a clustered columnstore index. 이는 열이 제한될 수 있고 테이블에 보조 인덱스로 존재하기 때문에 비클러스터형 columnstore 인덱스라고 부릅니다.It is called a nonclustered columnstore index to because the columns can be limited and it exists as a secondary index on a table.

ON partition_scheme_name ***(** column_name)*ON *partition_scheme_name *(*** column_name**)
분할된 인덱스의 파티션이 매핑될 파일 그룹을 정의하는 파티션 구성표를 지정합니다.Specifies the partition scheme that defines the filegroups onto which the partitions of a partitioned index will be mapped. 파티션 구성표는 CREATE PARTITION SCHEME 또는 ALTER PARTITION SCHEME의 실행을 통해 데이터베이스 내에 있어야 합니다.The partition scheme must exist within the database by executing either CREATE PARTITION SCHEME or ALTER PARTITION SCHEME. column_name은 분할된 인덱스가 분할되는 기준으로 사용할 열을 지정합니다.column_name* specifies the column against which a partitioned index will be partitioned. 이 열은 partition_scheme_name에서 사용하는 파티션 함수의 인수와 데이터 형식, 길이 및 전체 자릿수가 일치해야 합니다.This column must match the data type, length, and precision of the argument of the partition function that partition_scheme_name is using. column_name은 인덱스 정의의 열만 사용할 필요는 없으며column_name is not restricted to the columns in the index definition. 기본 테이블의 모든 열을 지정할 수 있습니다. 단, UNIQUE 인덱스를 분할할 때 고유 키로 사용되는 열 중에서 column_name을 선택해야 하는 경우는 제외합니다.Any column in the base table can be specified, except when partitioning a UNIQUE index, column_name must be chosen from among those used as the unique key. 이 제한 사항으로 인해 데이터베이스 엔진Database Engine은 단일 파티션 내에서만 키 값의 고유성을 확인할 수 있습니다.This restriction allows the 데이터베이스 엔진Database Engine to verify uniqueness of key values within a single partition only.

참고

비고유 클러스터형 인덱스를 분할하는 경우 데이터베이스 엔진Database Engine은 기본적으로 지정되지 않은 분할 열을 클러스터형 인덱스 키 목록에 추가합니다.When you partition a non-unique, clustered index, the 데이터베이스 엔진Database Engine by default adds the partitioning column to the list of clustered index keys, if it is not already specified. 비고유 비클러스터형 인덱스를 분할하는 경우 데이터베이스 엔진Database Engine은 지정되지 않은 분할 열을 인덱스의 키가 아닌 포괄 열로 추가합니다.When partitioning a non-unique, nonclustered index, the 데이터베이스 엔진Database Engine adds the partitioning column as a non-key (included) column of the index, if it is not already specified.

partition_scheme_name 또는 filegroup이 지정되지 않고 테이블이 분할된 경우 인덱스는 동일한 분할 열을 사용하여 동일한 파티션 구성표에 기본 테이블로 배치됩니다.If partition_scheme_name or filegroup is not specified and the table is partitioned, the index is placed in the same partition scheme, using the same partitioning column, as the underlying table.

참고

XML 인덱스에서 파티션 구성표를 지정할 수 없습니다.You cannot specify a partitioning scheme on an XML index. 기본 테이블이 분할되면 XML 인덱스는 테이블과 동일한 파티션 구성표를 사용합니다.If the base table is partitioned, the XML index uses the same partition scheme as the table.

분할 인덱스에 대한 자세한 내용은 분할된 테이블 및 인덱스를 참조하세요.For more information about partitioning indexes, Partitioned Tables and Indexes.

ON filegroup_nameON filegroup_name
주어진 파일 그룹에 지정된 인덱스를 만듭니다.Creates the specified index on the specified filegroup. 지정된 위치가 없고 테이블 또는 뷰가 분할되지 않은 경우 인덱스는 동일한 파일 그룹을 기본 테이블 또는 뷰로 사용합니다.If no location is specified and the table or view is not partitioned, the index uses the same filegroup as the underlying table or view. 파일 그룹은 이미 존재해야 합니다.The filegroup must already exist.

ON " default "ON " default "
기본 파일 그룹에 지정된 인덱스를 만듭니다.Creates the specified index on the default filegroup.

이 컨텍스트에서 default는 키워드가 아닙니다.The term default, in this context, is not a keyword. 이것은 기본 파일 그룹에 대한 식별자이며 ON " default " 또는 ON [ default ] 와 같이 구분되어야 합니다.It is an identifier for the default filegroup and must be delimited, as in ON " default " or ON [ default ]. "default"를 지정하면 현재 세션의 QUOTED_IDENTIFIER 옵션이 ON이어야 합니다.If "default" is specified, the QUOTED_IDENTIFIER option must be ON for the current session. 이 값은 기본 설정입니다.This is the default setting. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.For more information, see SET QUOTED_IDENTIFIER (Transact-SQL).

[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ][ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

적용 대상: SQL ServerSQL Server.Applies to: SQL ServerSQL Server.

클러스터형 인덱스를 만들 때 테이블에 대한 FILESTREAM 데이터의 위치를 지정합니다.Specifies the placement of FILESTREAM data for the table when a clustered index is created. FILESTREAM_ON 절에서 FILESTREAM 데이터를 다른 FILESTREAM 파일 그룹 또는 파티션 구성표로 이동할 수 있습니다.The FILESTREAM_ON clause allows FILESTREAM data to be moved to a different FILESTREAM filegroup or partition scheme.

filestream_filegroup_name은 FILESTREAM 파일 그룹의 이름입니다.filestream_filegroup_name is the name of a FILESTREAM filegroup. 파일 그룹에는 CREATE DATABASE 또는 ALTER DATABASE 문을 사용하여 파일 그룹에 대해 정의된 파일이 하나 포함되어야 하며, 그렇지 않으면 오류가 발생합니다.The filegroup must have one file defined for the filegroup by using a CREATE DATABASE or ALTER DATABASE statement; otherwise, an error is raised.

테이블이 분할된 경우에는 FILESTREAM_ON 절이 포함되어야 하며 이 절에서 테이블의 파티션 구성표와 동일한 파티션 함수 및 파티션 열을 사용하는 FILESTREAM 파일 그룹의 파티션 구성표를 지정해야 합니다.If the table is partitioned, the FILESTREAM_ON clause must be included and must specify a partition scheme of FILESTREAM filegroups that uses the same partition function and partition columns as the partition scheme for the table. 그렇지 않으면 오류가 발생합니다.Otherwise, an error is raised.

테이블이 분할되지 않은 경우에는 FILESTREAM 열을 분할할 수 없습니다.If the table is not partitioned, the FILESTREAM column cannot be partitioned. 테이블의 FILESTREAM 데이터는 FILESTREAM_ON 절에 지정된 단일 파일 그룹에 저장되어야 합니다.FILESTREAM data for the table must be stored in a single filegroup that is specified in the FILESTREAM_ON clause.

클러스터형 인덱스가 생성되고 있고 테이블에 FILESTREAM 열이 포함되지 않은 경우 CREATE INDEX 문에 FILESTREAM_ON NULL을 지정할 수 있습니다.FILESTREAM_ON NULL can be specified in a CREATE INDEX statement if a clustered index is being created and the table does not contain a FILESTREAM column.

자세한 내용은 FILESTREAM(SQL Server)을 참조하세요.For more information, see FILESTREAM (SQL Server).

ROWGUIDCOLROWGUIDCOL
새 열이 행 GUID 열임을 나타냅니다.Indicates that the new column is a row GUID column. 테이블당 한 개의 uniqueidentifier 열만 ROWGUIDCOL 열로 지정할 수 있으며Only one uniqueidentifier column per table can be designated as the ROWGUIDCOL column. ROWGUIDCOL 속성을 적용하면 $ROWGUID를 사용하여 열을 참조할 수 있습니다.Applying the ROWGUIDCOL property enables the column to be referenced using $ROWGUID. ROWGUIDCOL 속성은 uniqueidentifier 열에만 할당할 수 있습니다.The ROWGUIDCOL property can be assigned only to a uniqueidentifier column. 사용자 정의 데이터 형식 열은 ROWGUIDCOL로 지정할 수 없습니다.User-defined data type columns cannot be designated with ROWGUIDCOL.

ROWGUIDCOL 속성은 열에 저장된 값이 고유하도록 강제 적용하지 않습니다.The ROWGUIDCOL property does not enforce uniqueness of the values stored in the column. 또한 테이블에 삽입된 새 행에 대한 값을 자동으로 생성하지도 않습니다.ROWGUIDCOL also does not automatically generate values for new rows inserted into the table. 각 열에 고유한 값을 생성하려면 INSERT 문에 NEWID 또는 NEWSEQUENTIALID 함수를 사용하거나 열에 대한 기본값으로 이러한 함수를 사용하십시오.To generate unique values for each column, either use the NEWID or NEWSEQUENTIALID function on INSERT statements or use these functions as the default for the column.

ENCRYPTED WITHENCRYPTED WITH
Always Encrypted 기능을 사용하여 열 암호화를 지정합니다.Specifies encrypting columns by using the Always Encrypted feature.

COLUMN_ENCRYPTION_KEY = key_nameCOLUMN_ENCRYPTION_KEY = key_name
열 암호화 키를 지정합니다.Specifies the column encryption key. 자세한 내용은 CREATE COLUMN ENCRYPTION KEY (Transact-SQL)을 참조하세요.For more information, see CREATE COLUMN ENCRYPTION KEY (Transact-SQL).

ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }ENCRYPTION_TYPE = { DETERMINISTIC | RANDOMIZED }
결정적 암호화 는 지정된 일반 텍스트 값에 대해 항상 동일한 암호화된 값을 생성하는 방법을 사용합니다.Deterministic encryption uses a method which always generates the same encrypted value for any given plain text value. 결정적 암호화를 사용하면 암호화된 값을 기반으로 같음 비교를 이용한 검색, 그룹화 및 같음 조인을 이용한 조인이 가능하지만, 권한이 없는 사용자가 암호화된 열의 패턴을 검사하여 암호화된 값에 관한 정보를 추측할 수도 있습니다.Using deterministic encryption allows searching using equality comparison, grouping, and joining tables using equality joins based on encrypted values, but can also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column. 결정적으로 암호화된 열의 두 테이블 조인은 두 열이 모두 같은 열 암호화 키를 사용하여 암호화된 경우에만 가능합니다.Joining two tables on columns encrypted deterministically is only possible if both columns are encrypted using the same column encryption key. 결정적 암호화에서는 문자 열에 대해 binary2 정렬 순서를 적용하는 열 데이터 정렬을 사용해야 합니다.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

임의 암호화 는 예측하기 어려운 방식으로 데이터를 암호화하는 방법을 사용합니다.Randomized encryption uses a method that encrypts data in a less predictable manner. 임의 암호화는 더 안전하지만 암호화된 열에 대한 같음 검색, 그룹화 및 조인을 할 수 없게 됩니다.Randomized encryption is more secure, but prevents equality searches, grouping, and joining on encrypted columns. 임의 암호화를 이용한 열은 인덱싱할 수 없습니다.Columns using randomized encryption cannot be indexed.

검색 매개 변수 또는 그룹화 매개 변수(예: 정부 ID 번호)가 될 열에 결정적 암호화를 사용합니다.Use deterministic encryption for columns that will be search parameters or grouping parameters, for example a government ID number. 다른 레코드와 함께 그룹화되지 않거나 테이블을 조인하는 데 사용되고 관심이 있는 암호화된 열을 포함한 행을 찾는 데에는 다른 열(거래 번호 등)을 사용하기 때문에 검색되지 않는 데이터(예: 신용 카드 번호)에 임의 암호화를 사용합니다.Use randomized encryption, for data such as a credit card number, which is not grouped with other records, or used to join tables, and which is not searched for because you use other columns (such as a transaction number) to find the row which contains the encrypted column of interest.

열은 한정 데이터 형식이어야 합니다.Columns must be of a qualifying data type.

ALGORITHMALGORITHM
'AEAD_AES_256_CBC_HMAC_SHA_256' 이어야 합니다.Must be 'AEAD_AES_256_CBC_HMAC_SHA_256'.

기능 제약 조건을 포함한 자세한 내용은 Always Encrypted (데이터베이스 엔진)을 참조하세요.For more information including feature constraints, see Always Encrypted (Database Engine).

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

SPARSESPARSE
열이 스파스 열임을 나타냅니다.Indicates that the column is a sparse column. 스파스 열의 저장소는 Null 값에 대해 최적화됩니다.The storage of sparse columns is optimized for null values. 스파스 열은 NOT NULL로 지정할 수 없습니다.Sparse columns cannot be designated as NOT NULL. 추가 제한 사항 및 스파스 열에 대한 자세한 내용은 스파스 열 사용을 참조하세요.For additional restrictions and more information about sparse columns, see Use Sparse Columns.

MASKED WITH ( FUNCTION = ' mask_function ')MASKED WITH ( FUNCTION = ' mask_function ')
적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

동적 데이터 마스크를 지정합니다.Specifies a dynamic data mask. mask_function은 적절한 매개 변수를 포함한 마스킹 함수의 이름 입니다.mask_function is the name of the masking function with the appropriate parameters. 세 함수를 사용할 수 있습니다.Three functions are available:

적용 대상: SQL ServerSQL Server.Applies to: SQL ServerSQL Server.

varbinary(max) 열에 대해서만 유효합니다.Valid only for varbinary(max) columns. varbinary(max) BLOB 데이터에 대한 FILESTREAM 저장소를 지정합니다.Specifies FILESTREAM storage for the varbinary(max) BLOB data.

테이블에는 ROWGUIDCOL 특성을 갖는 uniqueidentifier 데이터 형식의 열도 있어야 합니다.The table must also have a column of the uniqueidentifier data type that has the ROWGUIDCOL attribute. 이 열은 Null 값을 허용하지 않으며 UNIQUE 또는 PRIMARY KEY 단일 열 제약 조건을 가져야 합니다.This column must not allow null values and must have either a UNIQUE or PRIMARY KEY single-column constraint. 열의 GUID 값은 응용 프로그램에서 데이터를 삽입할 때 제공하거나 NEWID () 함수를 사용하는 DEFAULT 제약 조건을 통해 제공해야 합니다.The GUID value for the column must be supplied either by an application when inserting data, or by a DEFAULT constraint that uses the NEWID () function.

테이블에 대해 정의된 FILESTREAM 열이 있는 동안에는 ROWGUIDCOL 열을 삭제하고 관련 제약 조건을 변경할 수 없습니다.The ROWGUIDCOL column cannot be dropped and the related constraints cannot be changed while there is a FILESTREAM column defined for the table. ROWGUIDCOL 열은 마지막 FILESTREAM 열이 삭제된 이후에만 삭제될 수 있습니다.The ROWGUIDCOL column can be dropped only after the last FILESTREAM column is dropped.

열에 대해 FILESTREAM 저장소 특성이 지정된 경우 해당 열의 모든 값이 파일 시스템에 있는 FILESTREAM 데이터 컨테이너에 저장됩니다.When the FILESTREAM storage attribute is specified for a column, all values for that column are stored in a FILESTREAM data container on the file system.

COLLATE collation_nameCOLLATE collation_name
열에 대한 데이터 정렬을 지정합니다.Specifies the collation for the column. 데이터 정렬 이름으로는 Windows 데이터 정렬 이름 또는 SQL 데이터 정렬 이름을 사용할 수 있습니다.Collation name can be either a Windows collation name or an SQL collation name. collation_namechar, varchar, text, nchar, nvarcharntext 데이터 형식의 열에만 적용할 수 있습니다.collation_name is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types. 지정하지 않은 경우 열이 사용자 정의 데이터 형식이면 사용자 정의 데이터 형식의 데이터 정렬에 열이 할당되고 그렇지 않은 경우에는 데이터베이스의 기본 데이터 정렬에 할당됩니다.If not specified, the column is assigned either the collation of the user-defined data type, if the column is of a user-defined data type, or the default collation of the database.

Windows 및 SQL 데이터 정렬 이름에 대한 자세한 내용은 Windows 데이터 정렬 이름SQL 데이터 정렬 이름을 참조하세요.For more information about the Windows and SQL collation names, see Windows Collation Name and SQL Collation Name.

COLLATE 절에 대한 자세한 내용은 COLLATE (Transact-SQL)을 참조하세요.For more information about the COLLATE clause, see COLLATE (Transact-SQL).

CONSTRAINTCONSTRAINT
PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY 또는 CHECK 제약 조건 정의의 시작을 표시하는 선택적인 키워드입니다.Is an optional keyword that indicates the start of the definition of a PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY, or CHECK constraint.

constraint_nameconstraint_name
제약 조건의 이름입니다.Is the name of a constraint. 제약 조건 이름은 테이블이 속한 스키마 내에서 고유한 이름이어야 합니다.Constraint names must be unique within the schema to which the table belongs.

NULL | NOT NULLNULL | NOT NULL
열의 Null 값 허용 여부를 결정합니다.Determine whether null values are allowed in the column. NULL은 엄격하게 말해 제약 조건이 아니지만 NOT NULL처럼 지정할 수 있습니다.NULL is not strictly a constraint but can be specified just like NOT NULL. 계산 열에서는 PERSISTED를 지정한 경우에만 NOT NULL을 지정할 수 있습니다.NOT NULL can be specified for computed columns only if PERSISTED is also specified.

PRIMARY KEYPRIMARY KEY
지정한 열에 고유 인덱스를 통해 엔터티 무결성을 적용하는 제약 조건입니다.Is a constraint that enforces entity integrity for a specified column or columns through a unique index. PRIMARY KEY 제약 조건은 각 테이블마다 하나만 만들 수 있습니다.Only one PRIMARY KEY constraint can be created per table.

UNIQUEUNIQUE
지정한 열에 대해 고유 인덱스를 통해 엔터티 무결성을 적용하는 제약 조건입니다.Is a constraint that provides entity integrity for a specified column or columns through a unique index. 하나의 테이블이 여러 개의 UNIQUE 제약 조건을 가질 수 있습니다.A table can have multiple UNIQUE constraints.

CLUSTERED | NONCLUSTEREDCLUSTERED | NONCLUSTERED
PRIMARY KEY 또는 UNIQUE 제약 조건에 대해 클러스터형 또는 비클러스터형 인덱스를 만들도록 지정합니다.Indicate that a clustered or a nonclustered index is created for the PRIMARY KEY or UNIQUE constraint. PRIMARY KEY 제약 조건의 기본값은 CLUSTERED이며 UNIQUE 제약 조건의 기본값은 NONCLUSTERED입니다.PRIMARY KEY constraints default to CLUSTERED, and UNIQUE constraints default to NONCLUSTERED.

CREATE TABLE 문에서는 한 가지 제약 조건에만 CLUSTERED를 지정할 수 있습니다.In a CREATE TABLE statement, CLUSTERED can be specified for only one constraint. UNIQUE 제약 조건에 대해 CLUSTERED를 지정하고 PRIMARY KEY 제약 조건도 지정한 경우 PRIMARY KEY의 기본값은 NONCLUSTERED입니다.If CLUSTERED is specified for a UNIQUE constraint and a PRIMARY KEY constraint is also specified, the PRIMARY KEY defaults to NONCLUSTERED.

다음은 디스크 기반 테이블에 있는 비클러스터형을 사용하는 방법을 보여 줍니다.The following shows how to use NONCLUSTERED in a disk-based table:

CREATE TABLE t1 ( c1 int, INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t2( c1 int INDEX ix_1 NONCLUSTERED (c1))   
CREATE TABLE t3( c1 int, c2 int INDEX ix_1 NONCLUSTERED)   
CREATE TABLE t4( c1 int, c2 int, INDEX ix_1 NONCLUSTERED (c1,c2))  

FOREIGN KEY REFERENCESFOREIGN KEY REFERENCES
열에 있는 데이터에 대한 참조 무결성을 제공하는 제약 조건입니다.Is a constraint that provides referential integrity for the data in the column or columns. FOREIGN KEY 제약 조건을 지정하려면 열의 각 값이 참조된 테이블의 참조된 해당 열에 있어야 합니다.FOREIGN KEY constraints require that each value in the column exists in the corresponding referenced column or columns in the referenced table. FOREIGN KEY 제약 조건은 참조되는 테이블의 PRIMARY KEY 또는 UNIQUE 제약 조건 열이나 참조되는 테이블의 UNIQUE INDEX에서 참조되는 열만 참조할 수 있습니다.FOREIGN KEY constraints can reference only columns that are PRIMARY KEY or UNIQUE constraints in the referenced table or columns referenced in a UNIQUE INDEX on the referenced table. 계산 열의 외래 키 또한 PERSISTED로 표시되어야 합니다.Foreign keys on computed columns must also be marked PERSISTED.

[ schema_name.] referenced_table_name][ schema_name.] referenced_table_name]
FOREIGN KEY 제약 조건이 참조하는 테이블과 그 테이블이 속한 스키마의 이름입니다.Is the name of the table referenced by the FOREIGN KEY constraint, and the schema to which it belongs.

( ref_column [ ,... n ] )( ref_column [ ,... n ] )
FOREIGN KEY 제약 조건이 참조하는 테이블의 열 또는 열 목록입니다.Is a column, or list of columns, from the table referenced by the FOREIGN KEY constraint.

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
행이 참조 관계를 가지고 참조된 행이 부모 테이블에서 삭제될 경우에 테이블의 행에 수행될 동작을 지정합니다.Specifies what action happens to rows in the table created, if those rows have a referential relationship and the referenced row is deleted from the parent table. 기본값은 NO ACTION입니다.The default is NO ACTION.

NO ACTIONNO ACTION
데이터베이스 엔진Database Engine에서는 오류가 발생하며 부모 테이블의 행에 대한 삭제 동작이 롤백됩니다.The 데이터베이스 엔진Database Engine raises an error and the delete action on the row in the parent table is rolled back.

CASCADECASCADE
부모 테이블에서 행을 삭제한 경우 참조 테이블에서 해당 행이 삭제됩니다.Corresponding rows are deleted from the referencing table if that row is deleted from the parent table.

SET NULLSET NULL
부모 테이블에서 해당 행을 삭제하면 외래 키를 구성하는 모든 값이 NULL로 설정됩니다.All the values that make up the foreign key are set to NULL if the corresponding row in the parent table is deleted. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
부모 테이블에서 해당 행을 삭제하면 외래 키를 구성하는 모든 값이 기본값으로 설정됩니다.All the values that make up the foreign key are set to their default values if the corresponding row in the parent table is deleted. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본 정의가 있어야 합니다.For this constraint to execute, all foreign key columns must have default definitions. 열이 Null을 허용하고 명시적 기본값이 설정되어 있지 않은 경우 NULL은 해당 열의 암시적 기본값이 됩니다.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

논리적 레코드를 사용하는 병합 게시에 테이블이 포함되는 경우 CASCADE를 지정하지 마세요.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.For more information about logical records, see Group Changes to Related Rows with Logical Records.

해당 테이블에 INSTEAD OF 트리거 ON DELETE가 이미 있으면 ON DELETE CASCADE를 정의할 수 없습니다.ON DELETE CASCADE cannot be defined if an INSTEAD OF trigger ON DELETE already exists on the table.

예를 들어 AdventureWorks2012AdventureWorks2012 데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table. ProductVendor.BusinessEntityID 외래 키는 Vendor.BusinessEntityID 기본 키를 참조합니다.The ProductVendor.BusinessEntityID foreign key references the Vendor.BusinessEntityID primary key.

Vendor 테이블의 행에 대해 DELETE 문을 실행하고 ProductVendor.BusinessEntityID에 대해 ON DELETE CASCADE 동작을 지정하면 데이터베이스 엔진Database EngineProductVendor 테이블에 하나 이상의 종속 행이 있는지 확인합니다.If a DELETE statement is executed on a row in the Vendor table, and an ON DELETE CASCADE action is specified for ProductVendor.BusinessEntityID, the 데이터베이스 엔진Database Engine checks for one or more dependent rows in the ProductVendor table. ProductVendor 테이블에 종속 행이 있는 경우 삭제되며 Vendor 테이블에서 참조된 행도 삭제됩니다.If any exist, the dependent rows in the ProductVendor table are deleted, and also the row referenced in the Vendor table.

반대로 NO ACTION을 지정한 경우 ProductVendor 테이블에 Vendor 행을 참조하는 행이 하나 이상 있으면 데이터베이스 엔진Database Engine에서 오류가 발생하고 Vendor 행의 삭제 동작이 롤백됩니다.Conversely, if NO ACTION is specified, the 데이터베이스 엔진Database Engine raises an error and rolls back the delete action on the Vendor row if there is at least one row in the ProductVendor table that references it.

ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
변경된 테이블의 행에 참조 관계가 있고 참조된 행이 부모 테이블에서 업데이트될 경우 해당 행에 대해 발생할 동작을 지정합니다.Specifies what action happens to rows in the table altered when those rows have a referential relationship and the referenced row is updated in the parent table. 기본값은 NO ACTION입니다.The default is NO ACTION.

NO ACTIONNO ACTION
데이터베이스 엔진Database Engine에서는 오류가 발생하며 부모 테이블의 행에 대한 업데이트 동작이 롤백됩니다.The 데이터베이스 엔진Database Engine raises an error, and the update action on the row in the parent table is rolled back.

CASCADECASCADE
부모 테이블에서 행이 업데이트될 때 참조 테이블에서도 해당 행이 업데이트됩니다.Corresponding rows are updated in the referencing table when that row is updated in the parent table.

SET NULLSET NULL
부모 테이블에서 행을 업데이트하면 해당 외래 키를 구성하는 모든 값이 NULL로 설정됩니다.All the values that make up the foreign key are set to NULL when the corresponding row in the parent table is updated. 이 제약 조건을 실행하려면 외래 키 열이 Null을 허용해야 합니다.For this constraint to execute, the foreign key columns must be nullable.

SET DEFAULTSET DEFAULT
부모 테이블에서 행을 업데이트하면 해당 외래 키를 구성하는 모든 값이 기본값으로 설정됩니다.All the values that make up the foreign key are set to their default values when the corresponding row in the parent table is updated. 이 제약 조건을 실행하려면 모든 외래 키 열에 기본 정의가 있어야 합니다.For this constraint to execute, all foreign key columns must have default definitions. 열이 Null을 허용하고 명시적 기본값이 설정되어 있지 않은 경우 NULL은 해당 열의 암시적 기본값이 됩니다.If a column is nullable, and there is no explicit default value set, NULL becomes the implicit default value of the column.

논리적 레코드를 사용하는 병합 게시에 테이블이 포함되는 경우 CASCADE를 지정하지 마세요.Do not specify CASCADE if the table will be included in a merge publication that uses logical records. 논리적 레코드에 대한 자세한 내용은 논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화를 참조하세요.For more information about logical records, see Group Changes to Related Rows with Logical Records.

변경할 테이블에 INSTEAD OF 트리거 ON UPDATE가 이미 존재하면 ON UPDATE CASCADE, SET NULL 또는 SET DEFAULT를 정의할 수 없습니다.ON UPDATE CASCADE, SET NULL, or SET DEFAULT cannot be defined if an INSTEAD OF trigger ON UPDATE already exists on the table that is being altered.

예를 들어 AdventureWorks2012AdventureWorks2012 데이터베이스에서 ProductVendor 테이블은 Vendor 테이블과 참조 관계를 갖습니다. ProductVendor.BusinessEntity 외래 키는 Vendor.BusinessEntityID 기본 키를 참조합니다.For example, in the AdventureWorks2012AdventureWorks2012 database, the ProductVendor table has a referential relationship with the Vendor table: ProductVendor.BusinessEntity foreign key references the Vendor.BusinessEntityID primary key.

Vendor 테이블의 행에 대해 UPDATE 문을 실행하고 ProductVendor.BusinessEntityID에 대해 ON UPDATE CASCADE 동작을 지정하면 데이터베이스 엔진Database EngineProductVendor 테이블에 하나 이상의 종속 행이 있는지 확인합니다.If an UPDATE statement is executed on a row in the Vendor table, and an ON UPDATE CASCADE action is specified for ProductVendor.BusinessEntityID, the 데이터베이스 엔진Database Engine checks for one or more dependent rows in the ProductVendor table. ProductVendor 테이블에 종속 행이 있는 경우 업데이트되며 Vendor 테이블에서 참조된 행도 업데이트됩니다.If any exist, the dependent rows in the ProductVendor table are updated, and also the row referenced in the Vendor table.

반대로 NO ACTION을 지정한 경우 ProductVendor 테이블에 Vendor 행을 참조하는 행이 하나 이상 있으면 데이터베이스 엔진Database Engine에서 오류가 발생하고 Vendor 행의 업데이트 동작이 롤백됩니다.Conversely, if NO ACTION is specified, the 데이터베이스 엔진Database Engine raises an error and rolls back the update action on the Vendor row if there is at least one row in the ProductVendor table that references it.

CHECKCHECK
열에 입력 가능한 값을 제한하여 도메인 무결성을 적용하는 제약 조건입니다.Is a constraint that enforces domain integrity by limiting the possible values that can be entered into a column or columns. 계산 열의 CHECK 제약 조건 또한 PERSISTED로 표시되어야 합니다.CHECK constraints on computed columns must also be marked PERSISTED.

logical_expressionlogical_expression
TRUE 또는 FALSE를 반환하는 논리 식입니다.Is a logical expression that returns TRUE or FALSE. 별칭 데이터 형식은 식에 포함될 수 없습니다.Alias data types cannot be part of the expression.

columncolumn
제약 조건 정의에서 사용하는 열을 표시하기 위해 테이블 제약 조건에서 괄호로 묶어 사용하는 열 또는 열 목록입니다.Is a column or list of columns, in parentheses, used in table constraints to indicate the columns used in the constraint definition.

[ ASC | DESC ][ ASC | DESC ]
테이블 제약 조건에 사용되는 열의 정렬 순서를 지정합니다.Specifies the order in which the column or columns participating in table constraints are sorted. 기본값은 ASC입니다.The default is ASC.

partition_scheme_namepartition_scheme_name
분할된 테이블의 파티션이 매핑될 파일 그룹을 정의하는 파티션 구성표의 이름입니다.Is the name of the partition scheme that defines the filegroups onto which the partitions of a partitioned table will be mapped. 파티션 구성표는 데이터베이스 내에 있어야 합니다.The partition scheme must exist within the database.

[ partition_column_name. ][ partition_column_name. ]
분할된 테이블의 분할 기준 열을 지정합니다.Specifies the column against which a partitioned table will be partitioned. 열은 partition_scheme_name에서 사용하는 파티션 함수에 지정된 열과 데이터 형식, 길이 및 전체 자릿수에서 일치해야 합니다.The column must match that specified in the partition function that partition_scheme_name is using in terms of data type, length, and precision. 파티션 함수에 참여하는 계산 열은 명시적으로 PERSISTED로 표시되어야 합니다.A computed columns that participates in a partition function must be explicitly marked PERSISTED.

중요

분할된 테이블 및 ALTER TABLE...SWITCH 작업의 원본이나 대상인 분할되지 않은 테이블의 분할 열에 NOT NULL을 지정하는 것이 좋습니다.We recommend that you specify NOT NULL on the partitioning column of partitioned tables, and also nonpartitioned tables that are sources or targets of ALTER TABLE...SWITCH operations. 이렇게 하면 분할 열의 CHECK 제약 조건에서 Null 값을 확인하지 않아도 됩니다.Doing this makes sure that any CHECK constraints on partitioning columns do not have to check for null values.

WITH FILLFACTOR =fillfactorWITH FILLFACTOR =fillfactor
데이터베이스 엔진Database Engine이 인덱스 데이터를 저장하는 데 사용하는 각 인덱스 페이지를 채우는 정도를 지정합니다.Specifies how full the 데이터베이스 엔진Database Engine should make each index page that is used to store the index data. 사용자가 지정한 fillfactor 값은 1에서 100 사이일 수 있습니다.User-specified fillfactor values can be from 1 through 100. 값을 지정하지 않으면 기본값 0이 사용됩니다.If a value is not specified, the default is 0. 채우기 비율 값 0과 100은 모든 면에서 동일합니다.Fill factor values 0 and 100 are the same in all respects.

중요

현재 WITH FILLFACTOR = fillfactor가 PRIMARY KEY 또는 UNIQUE 제약 조건에 적용되는 유일한 인덱스 옵션으로 기술되어 있는 것은 이전 버전과의 호환성을 위한 것이며 이후 릴리스에서는 이런 식으로 기술되지 않을 것입니다.Documenting WITH FILLFACTOR = fillfactor as the only index option that applies to PRIMARY KEY or UNIQUE constraints is maintained for backward compatibility, but will not be documented in this manner in future releases.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNScolumn_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
열 집합의 이름입니다.Is the name of the column set. 열 집합은 구조화된 출력으로 테이블의 모든 스파스 열을 결합하는 형식화되지 않은 XML 표현입니다.A column set is an untyped XML representation that combines all of the sparse columns of a table into a structured output. 열 집합에 대한 자세한 내용은 열 집합 사용을 참조하세요.For more information about column sets, see Use Column Sets.

PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )PERIOD FOR SYSTEM_TIME (system_start_time_column_name , system_end_time_column_name )

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

시스템에서 레코드가 유효한 기간을 기록하기 위해 사용할 열의 이름을 지정합니다.Specifies the names of the columns that the system will use to record the period for which a record is valid. GENERATED ALWAYS AS ROW { START | END } 및 WITH SYSTEM_VERSIONING = ON 인수와 함께 이 인수를 사용하여 테이블에 대한 시스템 버전 관리를 활성화합니다.Use this argument in conjunction with the GENERATED ALWAYS AS ROW { START | END } and WITH SYSTEM_VERSIONING = ON arguments to enable system versioning on a table. 자세한 내용은 Temporal Tables을 참조하세요.For more information, see Temporal Tables.

COMPRESSION_DELAYCOMPRESSION_DELAY

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

메모리 최적화를 위해 행이 columnstore 인덱스로 압축에 적합하게 될 때까지 변경되지 않고 테이블에 남아 있어야 하는 최소 분 수를 지정합니다.For a memory-optimized, delay specifies the minimum number of minutes a row must remain in the table, unchanged, before it is eligible for compression into the columnstore index. SQL Server는 마지막 업데이트 시간에 따라 압축할 특정 행을 선택합니다.SQL Server selects specific rows to compress according to their last update time. 예를 들어 행이 두 시간 기간 동안 자주 변경되는 경우 COMPRESSION_DELAY = 120분을 설정하여 SQL Server가 행을 압축하기 전에 업데이트가 완료되도록 할 수 있습니다.For example, if rows are changing frequently during a two-hour period of time, you could set COMPRESSION_DELAY = 120 Minutes to ensure updates are completed before SQL Server compresses the row.

디스크 기반 테이블의 경우 지연은 CLOSED 상태의 델타 rowgroup이 SQL Server에서 압축된 rowgroup으로 압축할 수 있게 될 때까지 델타 rowgroup에 남아 있어야 하는 최소 분 수를 지정합니다.For a disk-based table, delay specifies the minimum number of minutes a delta rowgroup in the CLOSED state must remain in the delta rowgroup before SQL Server can compress it into the compressed rowgroup. 디스크 기반 테이블은 개별 행에 대한 삽입 및 업데이트 시간을 추적하지 않으므로 SQL Server가 CLOSED 상태의 델타 rowgroup에 지연을 적용합니다.Since disk-based tables don't track insert and update times on individual rows, SQL Server applies the delay to delta rowgroups in the CLOSED state.

기본값은 0분입니다.The default is 0 minutes.

COMPRESSION_DELAY 사용 시기에 관한 권장 사항은 실시간 운영 분석을 위한 Columnstore 시작을 참조하세요.For recommendations on when to use COMPRESSION_DELAY, please see Get started with Columnstore for real time operational analytics

< table_option> ::= 하나 이상의 테이블 옵션을 지정합니다.< table_option> ::= Specifies one or more table options.

DATA_COMPRESSIONDATA_COMPRESSION
지정된 테이블, 파티션 번호 또는 파티션 범위에 대한 데이터 압축 옵션을 지정합니다.Specifies the data compression option for the specified table, partition number, or range of partitions. 다음과 같은 옵션이 있습니다.The options are as follows:

없음NONE
테이블 또는 지정된 파티션이 압축되지 않습니다.Table or specified partitions are not compressed.

ROWROW
테이블 또는 지정된 파티션이 행 압축을 사용하여 압축됩니다.Table or specified partitions are compressed by using row compression.

PAGEPAGE
테이블 또는 지정된 파티션이 페이지 압축을 사용하여 압축됩니다.Table or specified partitions are compressed by using page compression.

COLUMNSTORECOLUMNSTORE

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스를 모두 포함하는 columnstore 인덱스에만 적용됩니다.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE는 성능이 가장 우수한 columnstore 압축으로 압축하도록 지정합니다.COLUMNSTORE specifies to compress with the most performant columnstore compression. 이는 일반적인 선택입니다.This is the typical choice.

COLUMNSTORE_ARCHIVECOLUMNSTORE_ARCHIVE

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

클러스터형 columnstore 인덱스 및 비클러스터형 columnstore 인덱스를 모두 포함하는 columnstore 인덱스에만 적용됩니다.Applies only to columnstore indexes, including both nonclustered columnstore and clustered columnstore indexes. COLUMNSTORE_ARCHIVE는 테이블 또는 파티션을 보다 작은 크기로 더욱 압축합니다.COLUMNSTORE_ARCHIVE will further compress the table or partition to a smaller size. 보다 적은 저장소 크기가 필요한 기타 상황에서 보관하는 데 사용할 수 있으며 저장 및 검색에 더 많은 시간을 이용할 수 있습니다.This can be used for archival, or for other situations that require a smaller storage size and can afford more time for storage and retrieval.

압축에 대한 자세한 내용은 데이터 압축을 참조하세요.For more information about compression, see Data Compression.

ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )ON PARTITIONS ( { <partition_number_expression> | [ ,...n ] )
DATA_COMPRESSION 설정을 적용할 파티션을 지정합니다.Specifies the partitions to which the DATA_COMPRESSION setting applies. 테이블이 분할되지 않은 경우 ON PARTITIONS 인수를 사용하면 오류가 발생합니다.If the table is not partitioned, the ON PARTITIONS argument will generate an error. ON PARTITIONS 절을 지정하지 않으면 DATA_COMPRESSION 옵션이 분할된 테이블의 모든 파티션에 적용됩니다.If the ON PARTITIONS clause is not provided, the DATA_COMPRESSION option will apply to all partitions of a partitioned table.

partition_number_expression은 다음과 같은 방법으로 지정할 수 있습니다.partition_number_expression can be specified in the following ways:

  • 파티션의 파티션 번호를 지정합니다(예: ON PARTITIONS (2)).Provide the partition number of a partition, for example: ON PARTITIONS (2).

  • 여러 개별 파티션의 파티션 번호를 쉼표로 구분하여 지정합니다(예: ON PARTITIONS (1,5)).Provide the partition numbers for several individual partitions separated by commas, for example: ON PARTITIONS (1, 5).

  • 범위와 개별 파티션을 모두 지정합니다(예: ON PARTITIONS (2,4,6 TO 8)).Provide both ranges and individual partitions, for example: ON PARTITIONS (2, 4, 6 TO 8)

    <range>는 단어 TO로 구분된 파티션 번호로 지정할 수 있습니다(예: ON PARTITIONS (6 TO 8)).<range> can be specified as partition numbers separated by the word TO, for example: ON PARTITIONS (6 TO 8).

    여러 파티션에 대해 서로 다른 데이터 압축 유형을 설정하려면 DATA_COMPRESSION 옵션을 두 번 이상 지정합니다. 예를 들면 다음과 같습니다.To set different types of data compression for different partitions, specify the DATA_COMPRESSION option more than once, for example:

WITH   
(  
DATA_COMPRESSION = NONE ON PARTITIONS (1),   
DATA_COMPRESSION = ROW ON PARTITIONS (2, 4, 6 TO 8),   
DATA_COMPRESSION = PAGE ON PARTITIONS (3, 5)  
)  

<index_option> ::=<index_option> ::=
하나 이상의 인덱스 옵션을 지정합니다.Specifies one or more index options. 이러한 옵션에 대한 자세한 설명은 CREATE INDEX (Transact-SQL)을 참조하세요.For a complete description of these options, see CREATE INDEX (Transact-SQL).

PAD_INDEX = { ON | OFF }PAD_INDEX = { ON | OFF }
ON이면 FILLFACTOR로 지정한 사용 가능한 공간의 비율을 인덱스의 중간 수준 페이지에 적용합니다.When ON, the percentage of free space specified by FILLFACTOR is applied to the intermediate level pages of the index. OFF이거나 FILLFACTOR 값을 지정하지 않으면 중간 페이지의 키 집합을 고려하여 인덱스가 가질 수 있는 최대 크기의 행을 최소한 하나만큼 저장할 공간을 남기고 용량 한계에 가깝게 중간 수준 페이지를 채웁니다.When OFF or a FILLFACTOR value it not specified, the intermediate level pages are filled to near capacity leaving enough space for at least one row of the maximum size the index can have, considering the set of keys on the intermediate pages. 기본값은 OFF입니다.The default is OFF.

FILLFACTOR =fillfactorFILLFACTOR =fillfactor
인덱스를 만들거나 변경할 때 데이터베이스 엔진Database Engine이 각 인덱스 페이지의 리프 수준을 채우는 비율을 지정합니다.Specifies a percentage that indicates how full the 데이터베이스 엔진Database Engine should make the leaf level of each index page during index creation or alteration. fillfactor는 1에서 100 사이의 정수 값이어야 하며fillfactor must be an integer value from 1 to 100. 기본값은 0입니다.The default is 0. 채우기 비율 값 0과 100은 모든 면에서 동일합니다.Fill factor values 0 and 100 are the same in all respects.

IGNORE_DUP_KEY = { ON | OFF }IGNORE_DUP_KEY = { ON | OFF }
삽입 작업에서 고유 인덱스에 중복된 키 값을 삽입하려는 경우에 대한 오류 응답을 지정합니다.Specifies the error response when an insert operation attempts to insert duplicate key values into a unique index. IGNORE_DUP_KEY 옵션은 인덱스를 만들거나 다시 작성한 후의 삽입 작업에만 적용됩니다.The IGNORE_DUP_KEY option applies only to insert operations after the index is created or rebuilt. CREATE INDEX, ALTER INDEX 또는 UPDATE를 실행하는 경우에는 이 옵션이 아무런 영향을 미치지 않습니다.The option has no effect when executing CREATE INDEX, ALTER INDEX, or UPDATE. 기본값은 OFF입니다.The default is OFF.

ONON
중복된 키 값이 고유 인덱스에 삽입되는 경우 경고 메시지가 나타나고A warning message will occur when duplicate key values are inserted into a unique index. 고유성 제약 조건을 위반하는 행만 실패합니다.Only the rows violating the uniqueness constraint will fail.

OFFOFF
중복된 키 값이 고유 인덱스에 삽입되는 경우 오류 메시지가 나타나고An error message will occur when duplicate key values are inserted into a unique index. 전체 INSERT 작업이 롤백됩니다.The entire INSERT operation will be rolled back.

뷰, 비고유 인덱스, XML 인덱스, 공간 인덱스 및 필터링된 인덱스에 생성된 인덱스의 경우 IGNORE_DUP_KEY를 ON으로 설정할 수 없습니다.IGNORE_DUP_KEY cannot be set to ON for indexes created on a view, non-unique indexes, XML indexes, spatial indexes, and filtered indexes.

IGNORE_DUP_KEY를 보려면 sys.indexes를 사용하세요.To view IGNORE_DUP_KEY, use sys.indexes.

이전 버전과 호환되는 구문에서 WITH IGNORE_DUP_KEY는 WITH IGNORE_DUP_KEY = ON과 같습니다.In backward compatible syntax, WITH IGNORE_DUP_KEY is equivalent to WITH IGNORE_DUP_KEY = ON.

STATISTICS_NORECOMPUTE = { ON | OFF }STATISTICS_NORECOMPUTE = { ON | OFF }
ON이면 오래된 인덱스 통계를 자동으로 다시 계산하지 않습니다.When ON, out-of-date index statistics are not automatically recomputed. OFF이면 자동 통계 업데이트를 활성화합니다.When OFF, automatic statistics updating are enabled. 기본값은 OFF입니다.The default is OFF.

ALLOW_ROW_LOCKS = { ON | OFF }ALLOW_ROW_LOCKS = { ON | OFF }
ON이면 인덱스에 액세스할 때 행 잠금이 허용됩니다.When ON, row locks are allowed when you access the index. 행 잠금을 사용하는 시점은 데이터베이스 엔진Database Engine이 결정합니다.The 데이터베이스 엔진Database Engine determines when row locks are used. OFF이면 행 잠금을 사용하지 않습니다.When OFF, row locks are not used. 기본값은 ON입니다.The default is ON.

ALLOW_PAGE_LOCKS = { ON | OFF }ALLOW_PAGE_LOCKS = { ON | OFF }
ON이면 인덱스에 액세스할 때 페이지 잠금이 허용됩니다.When ON, page locks are allowed when you access the index. 페이지 잠금을 사용하는 시점은 데이터베이스 엔진Database Engine이 결정합니다.The 데이터베이스 엔진Database Engine determines when page locks are used. OFF이면 페이지 잠금을 사용하지 않습니다.When OFF, page locks are not used. 기본값은 ON입니다.The default is ON.

FILETABLE_DIRECTORY = directory_nameFILETABLE_DIRECTORY = directory_name

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

Windows 호환 FileTable 디렉터리 이름을 지정합니다.Specifies the windows-compatible FileTable directory name. 이 이름은 데이터베이스의 모든 FileTable 디렉터리 이름 중에서 고유해야 합니다.This name should be unique among all the FileTable directory names in the database. 고유성을 비교할 때는 데이터 정렬 설정과 관계없이 대/소문자가 구분되지 않습니다.Uniqueness comparison is case-insensitive, regardless of collation settings. 이 값을 지정하지 않으면 Filetable의 이름이 사용됩니다.If this value is not specified, the name of the filetable is used.

FILETABLE_COLLATE_FILENAME = { collation_name | database_default }FILETABLE_COLLATE_FILENAME = { collation_name | database_default }

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

FileTable의 Name 열에 적용할 데이터 정렬의 이름을 지정합니다.Specifies the name of the collation to be applied to the Name column in the FileTable. 데이터 정렬은 Windows 파일 명명 의미 체계를 따르도록 대/소문자를 구분하지 않아야 합니다.The collation must be case-insensitive to comply with Windows file naming semantics. 이 값을 지정하지 않으면 데이터베이스 기본 데이터 정렬이 사용됩니다.If this value is not specified, the database default collation is used. 데이터베이스 기본 데이터 정렬이 대/소문자를 구분하면 오류가 발생하고 CREATE TABLE 작업이 실패합니다.If the database default collation is case-sensitive, an error is raised and the CREATE TABLE operation fails.

collation_namecollation_name
대/소문자를 구분하지 않는 데이터 정렬의 이름입니다.The name of a case-insensitive collation.

database_defaultdatabase_default
데이터베이스의 기본 데이터 정렬을 사용하도록 지정합니다.Specifies that the default collation for the database should be used. 이 데이터 정렬은 대/소문자를 구분하지 않아야 합니다.This collation must be case-insensitive.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_nameFILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = constraint_name

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

FileTable에 자동으로 만들어지는 기본 키 제약 조건에 사용할 이름을 지정합니다.Specifies the name to be used for the primary key constraint that is automatically created on the FileTable. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.If this value is not specified, the system generates a name for the constraint.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = constraint_name

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

FileTable에서 stream_id 열에 자동으로 만들어지는 고유한 제약 조건에 사용할 이름을 지정합니다.Specifies the name to be used for the unique constraint that is automatically created on the stream_id column in the FileTable. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.If this value is not specified, the system generates a name for the constraint.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_nameFILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = constraint_name

적용 대상: SQL Server 2012(11.x)SQL Server 2012 (11.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2012(11.x)SQL Server 2012 (11.x) through SQL Server 2017SQL Server 2017.

FileTable에서 parent_path_locatorname 열에 자동으로 만들어지는 고유한 제약 조건에 사용할 이름을 지정합니다.Specifies the name to be used for the unique constraint that is automatically created on the parent_path_locator and name columns in the FileTable. 이 값을 지정하지 않으면 시스템에서 제약 조건 이름을 생성합니다.If this value is not specified, the system generates a name for the constraint.

SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name .SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

데이터 형식, NULL 허용 여부 제약 조건 및 기본 키 제약 조건 요구 사항이 충족된 경우 테이블의 시스템 버전 관리를 활성화합니다.Enables system versioning of the table if the datatype, nullability constraint, and primary key constraint requirements are met. HISTORY_TABLE 인수를 사용하지 않는 경우 시스템에서 현재 테이블의 동일한 파일 그룹에 있는 현재 테이블의 스키마와 일치하는 새 기록 테이블을 생성하여 두 테이블 간에 링크를 만들고 시스템이 기록 테이블의 현재 테이블에서 각 레코드의 기록을 기록할 수 있도록 합니다.If the HISTORY_TABLE argument is not used, the system generates a new history table matching the schema of the current table in the same filegroup as the current table, creating a link between the two tables and enables the system to record the history of each record in the current table in the history table. 이 기록 테이블의 이름은 MSSQL_TemporalHistoryFor<primary_table_object_id>가 됩니다.The name of this history table will be MSSQL_TemporalHistoryFor<primary_table_object_id>. 기본적으로 기록 테이블은 PAGE (으)로 압축됩니다.By default, the history table is PAGE compressed. HISTORY_TABLE 인수를 사용하여 기존 기록 테이블에 대한 링크를 만들고 해당 테이블을 사용하면 현재 테이블과 지정된 테이블 간에 링크가 생성됩니다.If the HISTORY_TABLE argument is used to create a link to and use an existing history table, the link is created between the current table and the specified table. 구성 분할은 현재 테이블에서 기록 테이블로 자동 복제를 수행하지 않기 때문에 현재 테이블이 분할된 경우 기록 테이블은 기본 파일 그룹에 생성됩니다.If current table is partitioned, the history table is created on default file group because partitioning configuration is not replicated automatically from the current table to the history table. 기록 테이블 생성 도중 기록 테이블의 이름을 지정하는 경우 스키마와 테이블 이름을 지정해야 합니다.If the name of a history table is specified during history table creation, you must specify the schema and table name. 기존 기록 테이블에 대한 링크를 만드는 경우 데이터 일관성 검사를 수행하도록 선택할 수 있습니다.When creating a link to an existing history table, you can choose to perform a data consistency check. 이 데이터 일관성 확인을 통해 기존 레코드가 겹치지 않도록 합니다.This data consistency check ensures that existing records do not overlap. 기본값은 데이터 일관성 검사를 수행하는 것입니다.Performing the data consistency check is the default. 이 인수를 PERIOD FOR SYSTEM_TIME 및 GENERATED ALWAYS AS ROW { START | END } 인수와 함께 사용하여 테이블에 대한 시스템 버전 관리를 활성화합니다.Use this argument in conjunction with the PERIOD FOR SYSTEM_TIME and GENERATED ALWAYS AS ROW { START | END } arguments to enable system versioning on a table. 자세한 내용은 Temporal Tables을 참조하세요.For more information, see Temporal Tables.

REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }REMOTE_DATA_ARCHIVE = { ON [ ( table_stretch_options [,...n] ) ] | OFF ( MIGRATION_STATE = PAUSED ) }

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

Stretch Database가 활성화 또는 비활성화된 상태에서 새 테이블을 만듭니다.Creates the new table with Stretch Database enabled or disabled. 자세한 내용은 Stretch Database를 참조하십시오.For more info, see Stretch Database.

테이블에 대해 Stretch Database 활성화Enabling Stretch Database for a table

테이블에 대해 ON을 지정하여 Stretch를 활성화한 경우 선택적으로 MIGRATION_STATE = OUTBOUND를 지정하여 데이터 마이그레이션을 즉시 시작하거나 MIGRATION_STATE = PAUSED를 지정하여 데이터 마이그레이션을 연기할 수 있습니다.When you enable Stretch for a table by specifying ON, you can optionally specify MIGRATION_STATE = OUTBOUND to begin migrating data immediately, or MIGRATION_STATE = PAUSED to postpone data migration. 기본값은 MIGRATION_STATE = OUTBOUND입니다.The default value is MIGRATION_STATE = OUTBOUND. 테이블의 Stretch 활성화에 대한 자세한 내용은 테이블에 대한 Stretch Database 활성화를 참조하세요.For more info about enabling Stretch for a table, see Enable Stretch Database for a table.

필수 구성 요소.Prerequisites. 테이블에 대해 Stretch를 활성화하기 전에 서버 및 데이터베이스에서 Stretch를 활성화해야 합니다.Before you enable Stretch for a table, you have to enable Stretch on the server and on the database. 자세한 내용은 Enable Stretch Database for a database를 참조하십시오.For more info, see Enable Stretch Database for a database.

사용 권한.Permissions. 데이터베이스 또는 테이블에 대해 Stretch를 활성화하려면 db_owner 권한이 필요합니다.Enabling Stretch for a database or a table requires db_owner permissions. 또한 테이블에 대해 Stretch를 활성화하면 테이블에 대한 ALTER 권한이 필요합니다.Enabling Stretch for a table also requires ALTER permissions on the table.

[ FILTER_PREDICATE = { null | predicate } ][ FILTER_PREDICATE = { null | predicate } ]

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x) 부터 SQL Server 2017SQL Server 2017까지Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017.

선택적으로 필터 조건자를 지정하여 기록 및 현재 데이터를 모두 포함하는 테이블에서 마이그레이션할 행을 선택합니다.Optionally specifies a filter predicate to select rows to migrate from a table that contains both historical and current data. 조건자는 결정적 인라인 테이블 반환 함수를 호출해야 합니다.The predicate must call a deterministic inline table-valued function. 자세한 내용은 테이블에 대해 Stretch Database 활성화필터 함수를 사용하여 마이그레이션할 행 선택을 참조하세요.For more info, see Enable Stretch Database for a table and Select rows to migrate by using a filter function.

중요

제대로 수행되지 않는 필터 조건자를 제공하면 데이터 마이그레이션 성능도 저하됩니다.If you provide a filter predicate that performs poorly, data migration also performs poorly. 스트레치 데이터베이스는 CROSS APPLY 연산자를 사용하여 테이블에 필터 조건자를 적용합니다.Stretch Database applies the filter predicate to the table by using the CROSS APPLY operator.

필터 조건자를 지정하지 않으면 전체 테이블이 마이그레이션됩니다.If you don't specify a filter predicate, the entire table is migrated.

필터 조건자를 지정할 경우 MIGRATION_STATE도 지정해야 합니다.When you specify a filter predicate, you also have to specify MIGRATION_STATE.

MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017 및 Azure SQL까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017, and Azure SQL .

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

값 ON은 테이블이 메모리 최적화된 형식임을 나타냅니다.The value ON indicates that the table is memory optimized. 메모리 최적화된 테이블은 트랜잭션 처리의 성능을 최적화하기 위해 사용되는 메모리 내 OLTP 기능의 일부입니다.Memory-optimized tables are part of the In-Memory OLTP feature, which is used to optimized the performance of transaction processing. 메모리 내 OLTP를 시작하려면 빠른 시작 1: 더 빠른 Transact-SQL 성능을 위한 메모리 내 OLTP 기술을 참조하세요.To get started with In-Memory OLTP see Quick Start 1: In-Memory OLTP Technologies for Faster Transact-SQL Performance. 메모리 최적화 테이블에 대한 더 심층적인 내용은 메모리 최적화 테이블을 참조하세요.For more in-depth information about memory-optimized tables see Memory-Optimized Tables.

기본값 OFF는 테이블이 디스크 기반임을 나타냅니다.The default value OFF indicates that the table is disk-based.

DURABILITYDURABILITY

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

SCHEMA_AND_DATA의 값은 테이블이 내구성이 있다는 것, 즉 변경 내용이 디스크에 유지되고 다시 시작 또는 장애 조치 시에 존속된다는 것을 나타냅니다.The value of SCHEMA_AND_DATA indicates that the table is durable, meaning that changes are persisted on disk and survive restart or failover. SCHEMA_AND_DATA는 기본값입니다.SCHEMA_AND_DATA is the default value.

SCHEMA_ONLY 값은 테이블이 비영구적임을 나타냅니다.The value of SCHEMA_ONLY indicates that the table is non-durable. 테이블 스키마는 유지되지만 데이터 업데이트는 데이터베이스를 다시 시작하거나 장애 조치할 때 삭제됩니다.The table schema is persisted but any data updates are not persisted upon a restart or failover of the database. DURABILITY=SCHEMA_ONLY는 MEMORY_OPTIMIZED=ON과 함께만 사용할 수 있습니다.DURABILITY=SCHEMA_ONLY is only allowed with MEMORY_OPTIMIZED=ON.

경고

DURABILITY = SCHEMA_ONLY를 사용하여 테이블이 만들어지고 그 후에 READ_COMMITTED_SNAPSHOTALTER DATABASE를 사용하여 변경되면 테이블의 데이터는 손실됩니다.When a table is created with DURABILITY = SCHEMA_ONLY, and READ_COMMITTED_SNAPSHOT is subsequently changed using ALTER DATABASE, data in the table will be lost.

BUCKET_COUNTBUCKET_COUNT

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

해시 인덱스에서 만들어야 하는 버킷 수를 나타냅니다.Indicates the number of buckets that should be created in the hash index. 해시 인덱스에서 BUCKET_COUNT의 최대값은 1,073,741,824입니다.The maximum value for BUCKET_COUNT in hash indexes is 1,073,741,824. 메모리 최적화 테이블의 인덱스에 대한 자세한 내용은 Memory-Optimized Tables에 대한 인덱스를 참조하세요.For more information about bucket counts, see Indexes for Memory-Optimized Tables.

Bucket_count는 필수 인수입니다.Bucket_count is a required argument.

INDEXINDEX

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

CREATE TABLE 문의 일부로 열 및 테이블 인덱스를 지정할 수 있습니다.Column and table indexes can be specified as part of the CREATE TABLE statement. 메모리 최적화 테이블에서 인덱스 추가 및 제거에 대한 자세한 내용은 메모리 최적화 테이블 변경을 참조하세요.For details about adding and removing indexes on memory-optimized tables see: Altering Memory-Optimized Tables

HASHHASH

적용 대상: SQL Server 2014(12.x)SQL Server 2014 (12.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지Applies to: SQL Server 2014(12.x)SQL Server 2014 (12.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

HASH 인덱스가 만들어졌음을 나타냅니다.Indicates that a HASH index is created.

해시 인덱스는 메모리 최적화 테이블에서만 지원됩니다.Hash indexes are supported only on memory-optimized tables.

RemarksRemarks

허용되는 테이블, 열, 제약 조건 및 인덱스 수에 대한 자세한 내용은 SQL Server에 대한 최대 용량 사양을 참조하세요.For information about the number of allowed tables, columns, constraints and indexes, see Maximum Capacity Specifications for SQL Server.

테이블 및 인덱스에 대한 공간 할당은 일반적으로 한 번에 한 익스텐트씩 이루어집니다.Space is generally allocated to tables and indexes in increments of one extent at a time. ALTER DATABASE의 SET MIXED_PAGE_ALLOCATION 옵션이 TRUE로 설정된 경우, 또는 언제나 SQL Server 2016(13.x)SQL Server 2016 (13.x) 이전에 테이블 또는 인덱스가 생성될 때 이는 균일 익스텐트를 채울 정도로 충분한 페이지를 받을 때까지 혼합 익스텐트에서 할당된 페이지입니다.When the SET MIXED_PAGE_ALLOCATION option of ALTER DATABASE is set to TRUE, or always prior to SQL Server 2016(13.x)SQL Server 2016 (13.x), when a table or index is created, it is allocated pages from mixed extents until it has enough pages to fill a uniform extent. 균일 익스텐트를 채울 정도로 충분한 페이지를 받은 이후에는 현재 할당된 익스텐트가 가득 찰 때마다 추가 익스텐트가 할당됩니다.After it has enough pages to fill a uniform extent, another extent is allocated every time the currently allocated extents become full. 할당된 공간의 크기 및 테이블이 사용하는 공간의 크기에 대한 보고서를 만들려면 sp_spaceused를 실행하십시오.For a report about the amount of space allocated and used by a table, execute sp_spaceused.

데이터베이스 엔진Database Engine은 열 정의에 DEFAULT, IDENTITY, ROWGUIDCOL 또는 열 제약 조건을 지정하는 특정한 순서를 요구하지는 않습니다.The 데이터베이스 엔진Database Engine does not enforce an order in which DEFAULT, IDENTITY, ROWGUIDCOL, or column constraints are specified in a column definition.

QUOTED IDENTIFIER 옵션은 테이블을 만들 때 OFF로 설정되어 있더라도 해당 테이블의 메타데이터에 항상 ON으로 저장됩니다.When a table is created, the QUOTED IDENTIFIER option is always stored as ON in the metadata for the table, even if the option is set to OFF when the table is created.

임시 테이블Temporary Tables

로컬 및 전역 임시 테이블을 만들 수 있습니다.You can create local and global temporary tables. 로컬 임시 테이블은 현재 세션에서만 볼 수 있으며 전역 임시 테이블은 모든 세션에서 볼 수 있습니다.Local temporary tables are visible only in the current session, and global temporary tables are visible to all sessions. 임시 테이블은 분할할 수 없습니다.Temporary tables cannot be partitioned.

로컬 임시 테이블 이름 앞에는 숫자 기호가 하나 추가되고(예: #table_name) 전역 임시 테이블 이름 앞에는 숫자 기호가 두 개 추가됩니다(예: ##table_name).Prefix local temporary table names with single number sign (#table_name), and prefix global temporary table names with a double number sign (##table_name).

SQL 문은 예를 들어 CREATE TABLE 문의 table_name에 대해 지정된 값을 사용하여 임시 테이블을 참조합니다####.SQL statements reference the temporary table by using the value specified for table_name in the CREATE TABLE statement, for example####:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY);  

INSERT INTO #MyTempTable VALUES (1);  

단일 저장 프로시저나 일괄 처리 내에 둘 이상의 임시 테이블을 만드는 경우 그 이름이 서로 달라야 합니다.If more than one temporary table is created inside a single stored procedure or batch, they must have different names.

여러 사용자가 동시에 실행할 수 있는 저장 프로시저 또는 응용 프로그램에서 로컬 임시 테이블을 만드는 경우 데이터베이스 엔진Database Engine은 다른 사용자가 만든 테이블을 구별할 수 있어야 합니다.If a local temporary table is created in a stored procedure or application that can be executed at the same time by several users, the 데이터베이스 엔진Database Engine must be able to distinguish the tables created by the different users. 데이터베이스 엔진Database Engine은 내부적으로 각 로컬 임시 테이블 이름에 숫자 접미사를 추가하여 구별합니다.The 데이터베이스 엔진Database Engine does this by internally appending a numeric suffix to each local temporary table name. tempdbsysobjects 테이블에 저장된 것과 같은 임시 테이블의 전체 이름은 CREATE TABLE 문에서 지정한 테이블 이름과 시스템이 생성한 숫자 접미사로 구성됩니다.The full name of a temporary table as stored in the sysobjects table in tempdb is made up of the table name specified in the CREATE TABLE statement and the system-generated numeric suffix. 접미사를 추가해야 하므로 로컬 임시 이름으로 지정된 table_name은 116자를 초과할 수 없습니다.To allow for the suffix, table_name specified for a local temporary name cannot exceed 116 characters.

임시 테이블은 DROP TABLE을 사용하여 명시적으로 삭제하지 않으면 범위를 벗어날 때 자동으로 삭제됩니다.Temporary tables are automatically dropped when they go out of scope, unless explicitly dropped by using DROP TABLE:

  • 저장 프로시저에서 만든 로컬 임시 테이블은 저장 프로시저를 마칠 때 자동으로 삭제합니다.A local temporary table created in a stored procedure is dropped automatically when the stored procedure is finished. 테이블은 해당 테이블을 만든 저장 프로시저가 실행하는 모든 중첩된 저장 프로시저에서 참조할 수 있습니다.The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. 테이블을 만든 저장 프로시저를 호출한 프로세스는 해당 테이블을 참조할 수 없습니다.The table cannot be referenced by the process that called the stored procedure that created the table.

  • 기타 모든 로컬 임시 테이블은 현재 세션이 끝날 때 자동으로 삭제됩니다.All other local temporary tables are dropped automatically at the end of the current session.

  • 전역 임시 테이블은 테이블을 만든 세션이 끝나고 이를 참조하는 다른 모든 태스크가 중지되면 자동으로 삭제됩니다.Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. 태스크와 테이블 간의 연결은 단일 Transact-SQLTransact-SQL 문의 사용 기간 동안만 유지 관리됩니다.The association between a task and a table is maintained only for the life of a single Transact-SQLTransact-SQL statement. 즉, 전역 임시 테이블은 만들기 세션이 끝났을 때 활동적으로 테이블을 참조하는 마지막 Transact-SQLTransact-SQL 문이 완료되면 삭제됩니다.This means that a global temporary table is dropped at the completion of the last Transact-SQLTransact-SQL statement that was actively referencing the table when the creating session ended.

    저장 프로시저 또는 트리거에서 만드는 로컬 임시 테이블은 저장 프로시저 또는 트리거를 호출하기 전에 만든 임시 테이블과 동일한 이름을 사용할 수 있습니다.A local temporary table created within a stored procedure or trigger can have the same name as a temporary table that was created before the stored procedure or trigger is called. 그러나 쿼리가 임시 테이블을 참조하고 이때 같은 이름을 가진 두 개의 임시 테이블이 동시에 존재하면 쿼리가 확인할 테이블은 정의되지 않습니다.However, if a query references a temporary table and two temporary tables with the same name exist at that time, it is not defined which table the query is resolved against. 중첩된 저장 프로시저도 이를 호출한 저장 프로시저가 만든 임시 테이블과 동일한 이름으로 임시 테이블을 만들 수 있습니다.Nested stored procedures can also create temporary tables with the same name as a temporary table that was created by the stored procedure that called it. 그러나 중첩된 프로시저에서 만든 테이블에 대한 수정 사항을 확인하려면 테이블의 구조 및 열 이름이 호출 프로시저에서 만든 테이블과 같아야 합니다.However, for modifications to resolve to the table that was created in the nested procedure, the table must have the same structure, with the same column names, as the table created in the calling procedure. 이는 다음 예에서 확인할 수 있습니다.This is shown in the following example.

CREATE PROCEDURE dbo.Test2  
AS  
n    CREATE TABLE #t(x INT PRIMARY KEY);  
    INSERT INTO #t VALUES (2);  
    SELECT Test2Col = x FROM #t;  
GO  

CREATE PROCEDURE dbo.Test1  
AS  
    CREATE TABLE #t(x INT PRIMARY KEY);  
    INSERT INTO #t VALUES (1);  
    SELECT Test1Col = x FROM #t;  
 EXEC Test2;  
GO  

CREATE TABLE #t(x INT PRIMARY KEY);  
INSERT INTO #t VALUES (99);  
GO  

EXEC Test1;  
GO  

결과 집합은 다음과 같습니다.Here is the result set.

(1 row(s) affected) 
Test1Col 
----------- 
1 

(1 row(s) affected) 
Test2Col 
----------- 
2 

로컬 또는 전역 임시 테이블을 만들 때 CREATE TABLE 구문은 FOREIGN KEY 제약 조건을 제외한 다른 모든 제약 조건 정의를 지원합니다.When you create local or global temporary tables, the CREATE TABLE syntax supports constraint definitions except for FOREIGN KEY constraints. 임시 테이블에서 FOREIGN KEY 제약 조건을 지정하면 문에서 해당 제약 조건을 건너뛰었다는 경고 메시지를 반환하며If a FOREIGN KEY constraint is specified in a temporary table, the statement returns a warning message that states the constraint was skipped. FOREIGN KEY 제약 조건 없이 테이블을 만듭니다.The table is still created without the FOREIGN KEY constraints. 임시 테이블은 FOREIGN KEY 제약 조건에서 참조할 수 없습니다.Temporary tables cannot be referenced in FOREIGN KEY constraints.

명명된 제약 조건으로 사용자 정의 트랜잭션의 범위 내에 임시 테이블을 만드는 경우 한 번에 한 사용자만 임시 테이블을 만드는 문을 실행할 수 있습니다.If a temporary table is created with a named constraint and the temporary table is created within the scope of a user-defined transaction, only one user at a time can execute the statement that creates the temp table. 예를 들어 저장 프로시저에서 명명된 기본 키 제약 조건을 사용하여 임시 테이블을 만드는 경우 여러 사용자가 동시에 저장 프로시저를 실행할 수 없습니다.For example, if a stored procedure creates a temporary table with a named primary key constraint, the stored procedure cannot be executed simultaneously by multiple users.

데이터베이스 범위 전역 임시 테이블(Azure SQL Database)Database scoped global temporary tables (Azure SQL Database)

SQL Server에 대한 전역 임시 테이블(## 테이블 이름으로 시작)은 tempdb에 저장되며 전체 SQL Server 인스턴스에 걸쳐 모든 사용자 세션 간에 공유됩니다.Global temporary tables for SQL Server (initiated with ## table name) are stored in tempdb and shared among all users’ sessions across the whole SQL Server instance. SQL 테이블 형식에 대한 자세한 내용은 테이블 만들기에 관한 위의 섹션을 참조하세요.For information on SQL table types, see the above section on Create Tables.

Azure SQL Database는 tempdb에도 저장되고 데이터베이스 수준을 범위로 하는 전역 임시 테이블을 지원합니다.Azure SQL Database supports global temporary tables that are also stored in tempdb and scoped to the database level. 즉, 전역 임시 테이블은 같은 Azure SQL Database 내의 모든 사용자 세션에 대해 공유됩니다.This means that global temporary tables are shared for all users’ sessions within the same Azure SQL database. 다른 Azure SQL 데이터베이스의 사용자 세션은 전역 임시 테이블에 액세스할 수 없습니다.User sessions from other Azure SQL databases cannot access global temporary tables.

Azure SQL DB에 대한 전역 임시 테이블은 SQL Server가 임시 테이블에 대해 사용하는 것과 같은 구문과 의미 체계를 따릅니다.Global temporary tables for Azure SQL DB follow the same syntax and semantics that SQL Server uses for temporary tables. 마찬가지로 전역 임시 저장 프로세서도 Azure SQL DB의 데이터베이스 수준을 범위로 합니다.Similarly, global temporary stored procedures are also scoped to the database level in Azure SQL DB. 로컬 임시 테이블(# 테이블 이름으로 시작)은 Azure SQL Database에 대해서도 지원되며 SQL Server가 사용하는 것과 같은 구문과 의미 체계를 따릅니다.Local temporary tables (initiated with # table name) are also supported for Azure SQL Database and follow the same syntax and semantics that SQL Server uses. 임시 테이블에 관한 위의 섹션을 참조하세요.See the above section on Temporary Tables.

중요

이 기능은 Azure SQL Database에 대해서만 사용할 수 있습니다.This feature is available for Azure SQL Database only.

Azure SQL DB에 대한 전역 임시 테이블 문제 해결Troubleshooting global temporary tables for Azure SQL DB

tempdb 문제 해결에 대해서는 tempdb의 부족한 디스크 공간 문제 해결을 참조하세요.For the troubleshooting the tempdb, see Troubleshooting Insufficient Disk space in tempdb. Azure SQL Database의 문제 해결 DMV에 액세스하려면 서버 관리자여야 합니다.To access the troubleshooting DMVs in Azure SQL Database, you must be a server admin.

사용 권한Permissions

모든 사용자가 전역 임시 개체를 만들 수 있습니다.Any user can create global temporary objects. 사용자가 추가 사용 권한을 받는 경우를 제외하고 자신의 고유 개체에만 액세스할 수 있습니다.Users can only access their own objects, unless they receive additional permissions. 의 인스턴스에 액세스할 때마다 SQL Server 로그인을 제공할 필요가 없습니다..

Examples

  • 세션 A는 Azure SQL Database testdb1에 전역 임시 테이블 ##test를 만들고 1행을 추가합니다.Session A creates a global temp table ##test in Azure SQL Database testdb1 and adds 1 row
CREATE TABLE ##test ( a int, b int);
INSERT INTO ##test values (1,1);

--Obtain object ID for temp table ##test 
SELECT OBJECT_ID('tempdb.dbo.##test') AS 'Object ID'; 

---Result
1253579504

---Obtain global temp table name for a given object ID 1253579504 in tempdb (2)
SELECT name FROM tempdb.sys.objects WHERE object_id = 1253579504

---Result
##test
  • 세션 B는 Azure SQL Database testdb1에 연결하며 세션 A에서 만든 테이블 ##test에 액세스할 수 있습니다.Session B connects to Azure SQL Database testdb1 and can access table ##test created by session A
SELECT * FROM ##test
---Results
1,1
  • 세션 C는 Azure SQL Database testdb2의 다른 데이터베이스에 연결하며 testdb1에서 만든 ##test에 액세스하려고 합니다.Session C connects to another database in Azure SQL Database testdb2 and wants to access ##test created in testdb1. 이 작업은 전역 임시 테이블에 대한 데이터베이스 범위 때문에 실패합니다.This select fails due to the database scope for the global temp tables
SELECT * FROM ##test
---Results
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'
  • 현재 사용자 데이터베이스 testdb1에서 Azure SQL Database tempdb의 시스템 개체 주소 지정Addressing system object in Azure SQL Database tempdb from current user database testdb1
SELECT * FROM tempdb.sys.objects
SELECT * FROM tempdb.sys.columns
SELECT * FROM tempdb.sys.database_files

분할된 테이블Partitioned Tables

CREATE TABLE을 사용하여 분할된 테이블을 만들기 전에 테이블이 분할되는 방식을 지정하는 파티션 함수를 만들어야 합니다.Before creating a partitioned table by using CREATE TABLE, you must first create a partition function to specify how the table becomes partitioned. CREATE PARTITION FUNCTION을 사용하여 파티션 함수를 만들 수 있습니다.A partition function is created by using CREATE PARTITION FUNCTION. 그런 다음 파티션 구성표를 만들어 파티션 함수가 표시하는 파티션을 유지하는 파일 그룹을 지정해야 합니다.Second, you must create a partition scheme to specify the filegroups that will hold the partitions indicated by the partition function. CREATE PARTITION SCHEME을 사용하여 파티션 구성표를 만들 수 있습니다.A partition scheme is created by using CREATE PARTITION SCHEME. 분할된 테이블에는 파일 그룹을 분리하는 PRIMARY KEY 또는 UNIQUE 제약 조건을 지정할 수 없습니다.Placement of PRIMARY KEY or UNIQUE constraints to separate filegroups cannot be specified for partitioned tables. 자세한 내용은 Partitioned Tables and Indexes을 참조하세요.For more information, see Partitioned Tables and Indexes.

PRIMARY KEY 제약 조건PRIMARY KEY Constraints

  • 테이블은 하나의 PRIMARY KEY 제약 조건만 포함할 수 있습니다.A table can contain only one PRIMARY KEY constraint.

  • PRIMARY KEY 제약 조건에 의해 생성된 인덱스 수는 비클러스터형 인덱스 999개, 클러스터형 인덱스 1개인 테이블의 인덱스 수 제한을 초과할 수 없습니다.The index generated by a PRIMARY KEY constraint cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • PRIMARY KEY 제약 조건에 대해 CLUSTERED 또는 NONCLUSTERED를 지정하지 않은 경우 UNIQUE 제약 조건에 대해 클러스터형 인덱스를 지정하지 않으면 CLUSTERED가 사용됩니다.If CLUSTERED or NONCLUSTERED is not specified for a PRIMARY KEY constraint, CLUSTERED is used if there are no clustered indexes specified for UNIQUE constraints.

  • PRIMARY KEY 제약 조건 내에서 정의된 모든 열은 NOT NULL로 정의되어야 합니다.All columns defined within a PRIMARY KEY constraint must be defined as NOT NULL. NULL 허용 여부를 지정하지 않은 경우에는 PRIMARY KEY 제약 조건에 참여하는 모든 열의 NULL 허용 여부가 NOT NULL로 설정됩니다.If nullability is not specified, all columns participating in a PRIMARY KEY constraint have their nullability set to NOT NULL.

    참고

    메모리 최적화 테이블의 경우 NULL을 허용하는 키 열이 허용됩니다.For memory-optimized tables, the NULLable key column is allowed.

  • CLR 사용자 정의 형식 열에 기본 키를 정의하는 경우 형식 구현이 이진 순서를 지원해야 합니다.If a primary key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. 자세한 내용은 CLR 사용자 정의 형식을 참조하세요.For more information, see CLR User-Defined Types.

UNIQUE 제약 조건UNIQUE Constraints

  • UNIQUE 제약 조건에 CLUSTERED 또는 NONCLUSTERED를 지정하지 않은 경우에는 기본적으로 NONCLUSTERED가 사용됩니다.If CLUSTERED or NONCLUSTERED is not specified for a UNIQUE constraint, NONCLUSTERED is used by default.

  • 각 UNIQUE 제약 조건은 인덱스를 생성합니다.Each UNIQUE constraint generates an index. UNIQUE 제약 조건의 수가 많아도 테이블의 비클러스터형 인덱스는 999개, 클러스터형 인덱스는 1개를 초과할 수 없습니다.The number of UNIQUE constraints cannot cause the number of indexes on the table to exceed 999 nonclustered indexes and 1 clustered index.

  • CLR 사용자 정의 형식 열에 UNIQUE 제약 조건을 정의하는 경우 형식 구현이 이진 순서 또는 연산자 기반의 순서를 지원해야 합니다.If a unique constraint is defined on a CLR user-defined type column, the implementation of the type must support binary or operator-based ordering. 자세한 내용은 CLR 사용자 정의 형식을 참조하세요.For more information, see CLR User-Defined Types.

FOREIGN KEY 제약 조건FOREIGN KEY Constraints

  • FOREIGN KEY 제약 조건의 열에 NULL 외의 다른 값을 입력한 경우에는 그 값이 참조되는 열에 있어야 합니다. 그렇지 않은 경우에는 외래 키 위반 오류 메시지가 반환됩니다.When a value other than NULL is entered into the column of a FOREIGN KEY constraint, the value must exist in the referenced column; otherwise, a foreign key violation error message is returned.

  • 원본 열을 지정하지 않는 한 FOREIGN KEY 제약 조건이 선행 열에 적용됩니다.FOREIGN KEY constraints are applied to the preceding column, unless source columns are specified.

  • FOREIGN KEY 제약 조건은 같은 서버의 같은 데이터베이스 내에 있는 테이블만 참조할 수 있습니다.FOREIGN KEY constraints can reference only tables within the same database on the same server. 상호 데이터베이스 참조 무결성은 트리거를 통해 구현해야 합니다.Cross-database referential integrity must be implemented through triggers. 자세한 내용은 CREATE TRIGGER(Transact-SQL)를 참조하세요.For more information, see CREATE TRIGGER (Transact-SQL).

  • FOREIGN KEY 제약 조건은 같은 테이블에 있는 다른 열을 참조할 수 있습니다.FOREIGN KEY constraints can reference another column in the same table. 이것을 자체 참조라고 합니다.This is referred to as a self-reference.

  • 열 수준 FOREIGN KEY 제약 조건의 REFERENCES 절은 참조 열을 하나만 나열할 수 있습니다.The REFERENCES clause of a column-level FOREIGN KEY constraint can list only one reference column. 이 열의 데이터 형식은 제약 조건이 정의된 열의 데이터 형식과 같아야 합니다.This column must have the same data type as the column on which the constraint is defined.

  • 테이블 수준 FOREIGN KEY 제약 조건의 REFERENCES 절에는 제약 조건 열 목록의 열 개수와 같은 수의 참조 열이 있어야 합니다.The REFERENCES clause of a table-level FOREIGN KEY constraint must have the same number of reference columns as the number of columns in the constraint column list. 각 참조 열의 데이터 형식도 열 목록의 해당 열과 같아야 합니다.The data type of each reference column must also be the same as the corresponding column in the column list.

  • timestamp 유형의 열이 외래 키 또는 참조 키의 일부인 경우에는 CASCADE, SET NULL 또는 SET DEFAULT를 지정할 수 없습니다.CASCADE, SET NULL or SET DEFAULT cannot be specified if a column of type timestamp is part of either the foreign key or the referenced key.

  • CASCADE, SET NULL, SET DEFAULT 및 NO ACTION은 서로 참조 관계를 가진 테이블에서 결합될 수 있습니다.CASCADE, SET NULL, SET DEFAULT and NO ACTION can be combined on tables that have referential relationships with each other. 데이터베이스 엔진Database Engine 이 NO ACTION을 발견하면 관련된 CASCADE, SET NULL 및 SET DEFAULT 동작을 멈추고 롤백합니다.If the 데이터베이스 엔진Database Engine encounters NO ACTION, it stops and rolls back related CASCADE, SET NULL and SET DEFAULT actions. DELETE 문으로 CASCADE, SET NULL, SET DEFAULT 및 NO ACTION 동작을 결합하면 데이터베이스 엔진Database Engine 이 NO ACTION을 확인하기 전에 모든 CASCADE, SET NULL 및 SET DEFAULT 동작을 적용합니다.When a DELETE statement causes a combination of CASCADE, SET NULL, SET DEFAULT and NO ACTION actions, all the CASCADE, SET NULL and SET DEFAULT actions are applied before the 데이터베이스 엔진Database Engine checks for any NO ACTION.

  • 데이터베이스 엔진Database Engine 은 테이블에 포함하여 다른 테이블을 참조하는 FOREIGN KEY 제약 조건의 수나 특정 테이블을 참조하는 다른 테이블 소유의 FOREIGN KEY 제약 조건의 수에 미리 한계를 정의하지 않습니다.The 데이터베이스 엔진Database Engine does not have a predefined limit on either the number of FOREIGN KEY constraints a table can contain that reference other tables, or the number of FOREIGN KEY constraints that are owned by other tables that reference a specific table.

    하지만 실제로 사용할 수 있는 FOREIGN KEY 제약 조건의 수는 하드웨어 구성 및 데이터베이스와 응용 프로그램의 디자인에 따라 제한됩니다.Nevertheless, the actual number of FOREIGN KEY constraints that can be used is limited by the hardware configuration and by the design of the database and application. 테이블에 포함되거나 이 테이블을 참조하는 FOREIGN KEY 제약 조건의 수가 각각 253개를 넘지 않도록 하는 것이 좋습니다.We recommend that a table contain no more than 253 FOREIGN KEY constraints, and that it be referenced by no more than 253 FOREIGN KEY constraints. 유효 한계는 응용 프로그램과 하드웨어에 따라 더 많거나 적을 수 있습니다.The effective limit for you may be more or less depending on the application and hardware. 데이터베이스와 응용 프로그램을 디자인할 때는 FOREIGN KEY 제약 조건을 적용하는 비용도 고려하십시오.Consider the cost of enforcing FOREIGN KEY constraints when you design your database and applications.

  • 임시 테이블에는 FOREIGN KEY 제약 조건이 적용되지 않습니다.FOREIGN KEY constraints are not enforced on temporary tables.

  • FOREIGN KEY 제약 조건은 참조되는 테이블의 PRIMARY KEY 또는 UNIQUE 제약 조건에 있는 열이나 참조되는 테이블의 UNIQUE INDEX에 있는 열만 참조할 수 있습니다.FOREIGN KEY constraints can reference only columns in PRIMARY KEY or UNIQUE constraints in the referenced table or in a UNIQUE INDEX on the referenced table.

  • CLR 사용자 정의 형식 열에 외래 키를 정의하는 경우 형식 구현이 이진 순서를 지원해야 합니다.If a foreign key is defined on a CLR user-defined type column, the implementation of the type must support binary ordering. 자세한 내용은 CLR 사용자 정의 형식을 참조하세요.For more information, see CLR User-Defined Types.

  • 외래 키 관계에 참여하는 열은 같은 길이와 배율로 정의되어야 합니다.Columns participating in a foreign key relationship must be defined with the same length and scale.

DEFAULT 정의DEFAULT Definitions

  • 하나의 열에는 하나의 DEFAULT 정의만 있을 수 있습니다.A column can have only one DEFAULT definition.

  • DEFAULT 정의는 상수 값, 함수, SQL 표준 무항 함수 또는 NULL을 포함할 수 있습니다.A DEFAULT definition can contain constant values, functions, SQL standard niladic functions, or NULL. 다음 표에서는 무항 함수 및 무항 함수가 INSERT 문에서 기본적으로 반환하는 값을 보여 줍니다.The following table shows the niladic functions and the values they return for the default during an INSERT statement.

    SQL-92 무항 함수SQL-92 niladic function 반환 값Value returned
    CURRENT_TIMESTAMPCURRENT_TIMESTAMP 현재 날짜 및 시간입니다.Current date and time.
    CURRENT_USERCURRENT_USER 삽입을 수행하는 사용자의 이름입니다.Name of user performing an insert.
    SESSION_USERSESSION_USER 삽입을 수행하는 사용자의 이름입니다.Name of user performing an insert.
    SYSTEM_USERSYSTEM_USER 삽입을 수행하는 사용자의 이름입니다.Name of user performing an insert.
    UserUSER 삽입을 수행하는 사용자의 이름입니다.Name of user performing an insert.
  • DEFAULT 정의 내의 constant_expression은 해당 테이블의 다른 열, 다른 테이블, 뷰 또는 저장 프로시저를 참조할 수 없습니다.constant_expression in a DEFAULT definition cannot refer to another column in the table, or to other tables, views, or stored procedures.

  • timestamp 데이터 형식의 열 또는 IDENTITY 속성이 있는 열에는 DEFAULT 정의를 만들 수 없습니다.DEFAULT definitions cannot be created on columns with a timestamp data type or columns with an IDENTITY property.

  • 별칭 데이터 형식이 기본 개체에 바인딩된 경우에는 별칭 데이터 형식의 열에 대해 DEFAULT 정의를 만들 수 없습니다.DEFAULT definitions cannot be created for columns with alias data types if the alias data type is bound to a default object.

CHECK 제약 조건CHECK Constraints

  • 하나의 열은 원하는 수만큼의 CHECK 제약 조건을 가질 수 있으며 조건은 AND 및 OR로 결합된 여러 논리 식을 포함할 수 있습니다.A column can have any number of CHECK constraints, and the condition can include multiple logical expressions combined with AND and OR. 열에 대한 여러 CHECK 제약 조건은 만든 순서대로 검사됩니다.Multiple CHECK constraints for a column are validated in the order they are created.

  • 검색 조건은 부울 식으로 계산되어야 하며 다른 테이블을 참조할 수 없습니다.The search condition must evaluate to a Boolean expression and cannot reference another table.

  • 열 수준의 CHECK 제약 조건은 제약된 열만 참조할 수 있으며 테이블 수준의 CHECK 제약 조건은 같은 테이블의 열만 참조할 수 있습니다.A column-level CHECK constraint can reference only the constrained column, and a table-level CHECK constraint can reference only columns in the same table.

    CHECK CONSTRAINTS 및 규칙은 INSERT 및 UPDATE 문 동안 데이터의 유효성을 검사하는 동일한 역할을 합니다.CHECK CONSTRAINTS and rules serve the same function of validating the data during INSERT and UPDATE statements.

  • 열에 규칙 및 하나 이상의 CHECK 제약 조건이 있는 경우에는 모든 제한을 평가합니다.When a rule and one or more CHECK constraints exist for a column or columns, all restrictions are evaluated.

  • text, ntext 또는 image 열에는 CHECK 제약 조건을 정의할 수 없습니다.CHECK constraints cannot be defined on text, ntext, or image columns.

추가 제약 조건 정보Additional Constraint Information

  • 제약 조건으로 생성된 인덱스는 DROP INDEX 문으로 삭제할 수 없으며 제약 조건은 ALTER TABLE 문으로 삭제해야 합니다.An index created for a constraint cannot be dropped by using DROP INDEX; the constraint must be dropped by using ALTER TABLE. 제약 조건이 만들고 사용하는 인덱스는 ALTER INDEX...REBUILD를 사용하여 다시 작성할 수 있습니다.An index created for and used by a constraint can be rebuilt by using ALTER INDEX...REBUILD. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하세요.For more information, see Reorganize and Rebuild Indexes.

  • 제약 조건 이름은 identifiers에 적용되는 규칙을 따라야 하지만 숫자 기호(#)로 시작될 수 없습니다.Constraint names must follow the rules for identifiers, except that the name cannot start with a number sign (#). constraint_name을 지정하지 않으면 시스템에서 생성한 이름이 제약 조건에 할당됩니다.If constraint_name is not supplied, a system-generated name is assigned to the constraint. 제약 조건 이름은 제약 조건 위반에 대한 모든 오류 메시지에 표시됩니다.The constraint name appears in any error message about constraint violations.

  • INSERT, UPDATE 또는 DELETE 문에서 제약 조건을 위반한 경우에는 문이 종료됩니다.When a constraint is violated in an INSERT, UPDATE, or DELETE statement, the statement is ended. 하지만 SET XACT_ABORT를 OFF로 설정하면 문이 명시적 트랜잭션의 일부인 경우 그 트랜잭션은 계속 처리됩니다.However, when SET XACT_ABORT is set to OFF, the transaction, if the statement is part of an explicit transaction, continues to be processed. SET XACT_ABORT를 ON으로 설정하면 전체 트랜잭션이 롤백됩니다.When SET XACT_ABORT is set to ON, the whole transaction is rolled back. 또한 @@ERROR 시스템 함수를 확인하여 트랜잭션 정의와 함께 ROLLBACK TRANSACTION 문을 사용할 수도 있습니다.You can also use the ROLLBACK TRANSACTION statement with the transaction definition by checking the @@ERROR system function.

  • ALLOW_ROW_LOCKS = ON이고 ALLOW_PAGE_LOCK = ON이면 인덱스에 액세스할 때 행, 페이지 및 테이블 수준 잠금이 허용됩니다.When ALLOW_ROW_LOCKS = ON and ALLOW_PAGE_LOCK = ON, row-, page-, and table-level locks are allowed when you access the index. 데이터베이스 엔진Database Engine은 적절한 잠금을 선택하고 행 또는 페이지 잠금에서 테이블 잠금으로 잠금을 에스컬레이션할 수 있습니다.The 데이터베이스 엔진Database Engine chooses the appropriate lock and can escalate the lock from a row or page lock to a table lock. ALLOW_ROW_LOCKS = OFF이고 ALLOW_PAGE_LOCK = OFF이면 인덱스에 액세스할 때 테이블 수준 잠금만 허용됩니다.When ALLOW_ROW_LOCKS = OFF and ALLOW_PAGE_LOCK = OFF, only a table-level lock is allowed when you access the index.

  • 테이블에 FOREIGN KEY 또는 CHECK CONSTRAINTS 및 트리거가 있는 경우에는 트리거를 실행하기 전에 제약 조건에 대한 조건을 평가합니다.If a table has FOREIGN KEY or CHECK CONSTRAINTS and triggers, the constraint conditions are evaluated before the trigger is executed.

    테이블 및 해당 열에 대한 보고서를 만들려면 sp_help 또는 sp_helpconstraint를 사용하십시오.For a report on a table and its columns, use sp_help or sp_helpconstraint. 테이블의 이름을 바꾸려면 sp_rename을 사용하십시오.To rename a table, use sp_rename. 테이블에 종속적인 뷰 및 저장 프로시저에 대한 보고서를 만들려면 sys.dm_sql_referenced_entitiessys.dm_sql_referencing_entities를 사용하십시오.For a report on the views and stored procedures that depend on a table, use sys.dm_sql_referenced_entities and sys.dm_sql_referencing_entities.

테이블 정의 내의 NULL 허용 여부 규칙Nullability Rules Within a Table Definition

열의 Null 허용 여부에 따라 해당 열의 데이터로 Null 값(NULL)을 허용할 수 있는지 여부가 결정됩니다.The nullability of a column determines whether that column can allow a null value (NULL) as the data in that column. NULL은 0 또는 공백이 아니며 항목을 만들지 않았거나 명시적인 NULL을 지정했음을 의미하는 것으로 일반적으로 값을 알 수 없거나 적용할 수 없음을 나타냅니다.NULL is not zero or blank: NULL means no entry was made or an explicit NULL was supplied, and it typically implies that the value is either unknown or not applicable.

CREATE TABLE 또는 ALTER TABLE 문을 사용하여 테이블을 만들거나 변경할 때는 데이터베이스 및 세션 설정이 열 정의에 사용된 데이터 형식의 Null 허용 여부에 영향을 미치고 덮어 쓸 가능성이 있습니다.When you use CREATE TABLE or ALTER TABLE to create or alter a table, database and session settings influence and possibly override the nullability of the data type that is used in a column definition. 비계산 열은 항상 NULL 또는 NOT NULL로 명시적으로 정의하는 것이 좋으며 사용자 정의 데이터 형식을 사용할 때는 열에 해당 데이터 형식의 기본 Null 허용 여부를 적용하는 것이 좋습니다.We recommend that you always explicitly define a column as NULL or NOT NULL for noncomputed columns or, if you use a user-defined data type, that you allow the column to use the default nullability of the data type. 스파스 열은 항상 NULL을 허용해야 합니다.Sparse columns must always allow NULL.

열의 Null 허용 여부를 명시적으로 지정하지 않은 경우 열의 Null 허용 여부는 다음 표의 규칙을 따릅니다.When column nullability is not explicitly specified, column nullability follows the rules shown in the following table.

열 데이터 형식Column data type 규칙Rule
별칭 데이터 형식Alias data type 데이터베이스 엔진Database Engine은 데이터 형식을 만들 때 지정한 Null 허용 여부를 사용합니다.The 데이터베이스 엔진Database Engine uses the nullability that is specified when the data type was created. 데이터 형식의 기본 NULL 허용 여부를 결정하려면 sp_help를 사용합니다.To determine the default nullability of the data type, use sp_help.
CLR 사용자 정의 형식(CLR user-defined type)CLR user-defined type 열 정의에 따라 Null 허용 여부를 결정합니다.Nullability is determined according to the column definition.
시스템이 제공하는 데이터 형식System-supplied data type 시스템이 제공하는 데이터 형식에 옵션이 하나뿐인 경우에는 이 옵션이 우선 순위를 갖습니다.If the system-supplied data type has only one option, it takes precedence. timestamp 데이터 형식은 NOT NULL이어야 합니다.timestamp data types must be NOT NULL. SET를 사용하여 모든 세션 설정을 ON으로 설정한 경우:When any session settings are set ON by using SET:
ANSI_NULL_DFLT_ON = ON, NULL이 할당됩니다.ANSI_NULL_DFLT_ON = ON, NULL is assigned.
ANSI_NULL_DFLT_OFF = ON, NOT NULL이 할당됩니다.ANSI_NULL_DFLT_OFF = ON, NOT NULL is assigned.

ALTER DATABASE를 사용하여 모든 데이터베이스 설정을 구성한 경우:When any database settings are configured by using ALTER DATABASE:
ANSI_NULL_DEFAULT_ON = ON, NULL이 할당됩니다.ANSI_NULL_DEFAULT_ON = ON, NULL is assigned.
ANSI_NULL_DEFAULT_OFF = ON, NOT NULL이 할당됩니다.ANSI_NULL_DEFAULT_OFF = ON, NOT NULL is assigned.

ANSI_NULL_DEFAULT에 대한 데이터베이스 설정을 보려면 sys.databases 카탈로그 뷰를 사용하십시오.To view the database setting for ANSI_NULL_DEFAULT, use the sys.databases catalog view

세션에 대해 어떠한 ANSI_NULL_DFLT 옵션도 설정하지 않고 데이터베이스를 기본값(ANSI_NULL_DEFAULT가 OFF)으로 설정하면 기본값인 NOT NULL이 할당됩니다.When neither of the ANSI_NULL_DFLT options is set for the session and the database is set to the default (ANSI_NULL_DEFAULTis OFF), the default of NOT NULL is assigned.

열이 계산 열인 경우에는 항상 데이터베이스 엔진Database Engine이 열의 Null 허용 여부를 자동으로 결정합니다.If the column is a computed column, its nullability is always automatically determined by the 데이터베이스 엔진Database Engine. 이런 유형을 가진 열의 NULL 허용 여부를 알려면 COLUMNPROPERTY 함수에 AllowsNull 속성을 사용하십시오.To find out the nullability of this type of column, use the COLUMNPROPERTY function with the AllowsNull property.

참고

SQL Server ODBC 드라이버 및 SQL Server용 Microsoft OLE DB Provider는 모두 기본적으로 ANSI_NULL_DFLT_ON이 ON으로 설정되어 있습니다.The SQL Server ODBC driver and Microsoft OLE DB Provider for SQL Server both default to having ANSI_NULL_DFLT_ON set to ON. ODBC 및 OLE DB 사용자는 ODBC 데이터 원본에서 이를 구성하거나 응용 프로그램이 설정한 연결 속성 또는 특성을 사용하여 이를 구성할 수 있습니다.ODBC and OLE DB users can configure this in ODBC data sources, or with connection attributes or properties set by the application.

Data CompressionData Compression

시스템 테이블에는 압축을 사용할 수 없습니다.System tables cannot be enabled for compression. 테이블을 만들 때 데이터 압축은 달리 지정하지 않는 한 NONE으로 설정됩니다.When you are creating a table, data compression is set to NONE, unless specified otherwise. 범위를 벗어난 파티션 목록을 지정하면 오류가 발생합니다.If you specify a list of partitions or a partition that is out of range, an error will be generated. 데이터 압축에 대한 자세한 내용은 데이터 압축을 참조하세요.For a more information about data compression, see Data Compression.

압축 상태를 변경할 경우 테이블, 인덱스 또는 파티션에 어떤 영향을 주는지 확인하려면 sp_estimate_data_compression_savings 저장 프로시저를 사용합니다.To evaluate how changing the compression state will affect a table, an index, or a partition, use the sp_estimate_data_compression_savings stored procedure.

사용 권한Permissions

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

CREATE TABLE 문의 열이 사용자 정의 형식으로 정의되면 해당 형식에 대한 REFERENCES 권한이 필요합니다.If any columns in the CREATE TABLE statement are defined to be of a user-defined type, REFERENCES permission on the user-defined type is required.

CREATE TABLE 문에 있는 열을 CLR 사용자 정의 형식으로 정의하는 경우 해당 유형의 소유권이나 이에 대한 REFERENCES 권한이 필요합니다.If any columns in the CREATE TABLE statement are defined to be of a CLR user-defined type, either ownership of the type or REFERENCES permission on it is required.

CREATE TABLE 문의 열에 연관된 XML 스키마 컬렉션이 있는 경우 XML 스키마 컬렉션의 소유권이나 이에 대한 REFERENCES 권한이 필요합니다.If any columns in the CREATE TABLE statement have an XML schema collection associated with them, either ownership of the XML schema collection or REFERENCES permission on it is required.

모든 사용자가 tempdb에 임시 테이블을 만들 수 있습니다.Any user can create temporary tables in tempdb.

Examples

1.A. 열에 PRIMARY KEY 제약 조건 만들기Create a PRIMARY KEY constraint on a column

다음 예에서는 EmployeeID 테이블의 Employee 열에 클러스터형 인덱스가 있는 PRIMARY KEY 제약 조건에 대한 열 정의를 보여 줍니다.The following example shows the column definition for a PRIMARY KEY constraint with a clustered index on the EmployeeID column of the Employee table. 제약 조건 이름을 지정하지 않았기 때문에 시스템에서 제약 조건 이름을 제공합니다.Because a constraint name is not specified, the system supplies the constraint name.

CREATE TABLE dbo.Employee (EmployeeID int  
PRIMARY KEY CLUSTERED);  

2.B. FOREIGN KEY 제약 조건 사용Using FOREIGN KEY constraints

FOREIGN KEY 제약 조건은 다른 테이블을 참조하는 데 사용됩니다.A FOREIGN KEY constraint is used to reference another table. 외래 키는 단일 열 키 또는 복수 열 키가 될 수 있습니다.Foreign keys can be single-column keys or multicolumn keys. 다음 예에서는 SalesOrderHeader 테이블을 참조하는 SalesPerson 테이블에 대한 단일 열 FOREIGN KEY 제약 조건을 보여 줍니다.This following example shows a single-column FOREIGN KEY constraint on the SalesOrderHeader table that references the SalesPerson table. 단일 열 FOREIGN KEY 제약 조건에는 REFERENCES 절만 필요합니다.Only the REFERENCES clause is required for a single-column FOREIGN KEY constraint.

SalesPersonID int NULL  
REFERENCES SalesPerson(SalesPersonID)  

또한 명시적으로 FOREIGN KEY 절을 사용하여 열 특성을 다시 정할 수 있습니다.You can also explicitly use the FOREIGN KEY clause and restate the column attribute. 두 테이블에서 같은 열 이름을 사용할 필요는 없습니다.Note that the column name does not have to be the same in both tables.

FOREIGN KEY (SalesPersonID) REFERENCES SalesPerson(SalesPersonID)  

테이블 제약 조건으로 복수 열 키 제약 조건을 만듭니다.Multicolumn key constraints are created as table constraints. AdventureWorks2012AdventureWorks2012 데이터베이스에서 SpecialOfferProduct 테이블은 복수 열 PRIMARY KEY를 포함합니다.In the AdventureWorks2012AdventureWorks2012 database, the SpecialOfferProduct table includes a multicolumn PRIMARY KEY. 다음 예에서는 다른 테이블에서 이 키를 참조하는 방법을 보여 줍니다. 명시적인 제약 조건 이름은 선택적입니다.The following example shows how to reference this key from another table; an explicit constraint name is optional.

CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail FOREIGN KEY  
 (ProductID, SpecialOfferID)  
REFERENCES SpecialOfferProduct (ProductID, SpecialOfferID)  

3.C. UNIQUE 제약 조건 사용Using UNIQUE constraints

UNIQUE 제약 조건은 기본 키가 아닌 열에 고유성을 적용합니다.UNIQUE constraints are used to enforce uniqueness on nonprimary key columns. 다음 예에서는 Name 테이블의 Product 열이 고유한 것이어야 한다는 제한을 적용합니다.The following example enforces a restriction that the Name column of the Product table must be unique.

Name nvarchar(100) NOT NULL  
UNIQUE NONCLUSTERED  

4.D. DEFAULT 정의 사용Using DEFAULT definitions

기본값은 값을 지정하지 않은 경우 사용할 값을 INSERT 및 UPDATE 문으로 제공합니다.Defaults supply a value (with the INSERT and UPDATE statements) when no value is supplied. 예를 들어 AdventureWorks2012AdventureWorks2012 데이터베이스는 회사에서 직원이 담당하는 각기 다른 업무를 나열하는 조회 테이블을 포함할 수 있습니다.For example, the AdventureWorks2012AdventureWorks2012 database could include a lookup table listing the different jobs employees can fill in the company. 각각의 업무를 기술하는 열에 실제 설명을 명시적으로 입력하지 않으면 문자열 기본값으로 설명을 제공할 수 있습니다.Under a column that describes each job, a character string default could supply a description when an actual description is not entered explicitly.

DEFAULT 'New Position - title not formalized yet'  

DEFAULT 정의는 제약 조건 외에도 함수를 포함할 수 있습니다.In addition to constants, DEFAULT definitions can include functions. 항목의 현재 날짜를 보려면 다음 예를 사용하십시오.Use the following example to get the current date for an entry.

DEFAULT (getdate())  

무항 함수 검색도 데이터 무결성을 향상시킵니다.A niladic-function scan can also improve data integrity. 행을 삽입한 사용자를 추적하려면 USER에 대한 무항 함수를 사용하십시오.To keep track of the user that inserted a row, use the niladic-function for USER. 무항 함수를 괄호로 묶지 마십시오.Do not enclose the niladic-functions with parentheses.

DEFAULT USER  

5.E. CHECK 제약 조건 사용Using CHECK constraints

다음 예에서는 CreditRating 테이블의 Vendor 열에 입력한 값에 대한 제한을 보여 줍니다.The following example shows a restriction made to values that are entered into the CreditRating column of the Vendor table. 제약 조건은 명명되지 않았습니다.The constraint is unnamed.

CHECK (CreditRating >= 1 and CreditRating <= 5)  

다음 예에서는 테이블의 열에 입력된 문자 데이터에 대한 패턴 제한이 있는 명명된 제약 조건을 보여 줍니다.This example shows a named constraint with a pattern restriction on the character data entered into a column of a table.

CONSTRAINT CK_emp_id CHECK (emp_id LIKE   
'[A-Z][A-Z][A-Z][1-9][0-9][0-9][0-9][0-9][FM]'   
OR emp_id LIKE '[A-Z]-[A-Z][1-9][0-9][0-9][0-9][0-9][FM]')  

다음 예에서는 값이 특정 목록에 있도록 하거나 지정한 패턴을 따르도록 지정합니다.This example specifies that the values must be within a specific list or follow a specified pattern.

CHECK (emp_id IN ('1389', '0736', '0877', '1622', '1756')  
OR emp_id LIKE '99[0-9][0-9]')  

6.F. 전체 테이블 정의 표시Showing the complete table definition

다음 예에서는 AdventureWorks2012AdventureWorks2012 데이터베이스에 만든 PurchaseOrderDetail 테이블에 대한 모든 제약 조건 정의를 가진 전체 테이블 정의를 보여 줍니다.The following example shows the complete table definitions with all constraint definitions for table PurchaseOrderDetail created in the AdventureWorks2012AdventureWorks2012 database. 예제를 실행하기 위해 테이블 스키마가 dbo로 변경됩니다.Note that to run the sample, the table schema is changed to dbo.

CREATE TABLE dbo.PurchaseOrderDetail  
(  
    PurchaseOrderID int NOT NULL  
        REFERENCES Purchasing.PurchaseOrderHeader(PurchaseOrderID),  
    LineNumber smallint NOT NULL,  
    ProductID int NULL   
        REFERENCES Production.Product(ProductID),  
    UnitPrice money NULL,  
    OrderQty smallint NULL,  
    ReceivedQty float NULL,  
    RejectedQty float NULL,  
    DueDate datetime NULL,  
    rowguid uniqueidentifier ROWGUIDCOL  NOT NULL  
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (newid()),  
    ModifiedDate datetime NOT NULL   
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (getdate()),  
    LineTotal  AS ((UnitPrice*OrderQty)),  
    StockedQty  AS ((ReceivedQty-RejectedQty)),  
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber  
               PRIMARY KEY CLUSTERED (PurchaseOrderID, LineNumber)  
               WITH (IGNORE_DUP_KEY = OFF)  
)   
ON PRIMARY;  

7.G. XML 스키마 컬렉션 유형의 xml 열을 가진 테이블 만들기Creating a table with an xml column typed to an XML schema collection

다음 예에서는 XML 스키마 컬렉션 xml 유형의 HRResumeSchemaCollection 열이 있는 테이블을 만듭니다.The following example creates a table with an xml column that is typed to XML schema collection HRResumeSchemaCollection. DOCUMENT 키워드는 column_name에 있는 xml 데이터 형식의 각 인스턴스가 하나의 최상위 요소만 포함할 수 있도록 지정합니다.The DOCUMENT keyword specifies that each instance of the xml data type in column_name can contain only one top-level element.

CREATE TABLE HumanResources.EmployeeResumes   
   (LName nvarchar(25), FName nvarchar(25),   
    Resume xml( DOCUMENT HumanResources.HRResumeSchemaCollection) );  

8.H. 분할된 테이블 만들기Creating a partitioned table

다음 예에서는 테이블이나 인덱스를 4개의 파티션으로 분할하는 파티션 함수를 만듭니다.The following example creates a partition function to partition a table or index into four partitions. 그런 다음 4개의 파티션을 각각 보관할 파일 그룹을 지정하는 파티션 구성표를 만듭니다.Then, the example creates a partition scheme that specifies the filegroups in which to hold each of the four partitions. 마지막으로 파티션 구성표를 사용하는 테이블을 만듭니다.Finally, the example creates a table that uses the partition scheme. 이 예에서는 데이터베이스에 이미 파일 그룹이 있다고 가정합니다.This example assumes the filegroups already exist in the database.

CREATE PARTITION FUNCTION myRangePF1 (int)  
    AS RANGE LEFT FOR VALUES (1, 100, 1000) ;  
GO  

CREATE PARTITION SCHEME myRangePS1  
    AS PARTITION myRangePF1  
    TO (test1fg, test2fg, test3fg, test4fg) ;  
GO  

CREATE TABLE PartitionTable (col1 int, col2 char(10))  
    ON myRangePS1 (col1) ;  
GO  

col1PartitionTable 열 값을 바탕으로 하여 다음과 같은 방법으로 파티션을 할당합니다.Based on the values of column col1 of PartitionTable, the partitions are assigned in the following ways.

파일 그룹Filegroup test1fgtest1fg test2fgtest2fg test3fgtest3fg test4fgtest4fg
파티션Partition 11 22 33 44
Values col 1 <= 1col 1 <= 1 col1 > 1 AND col1 <= 100col1 > 1 AND col1 <= 100 col1 > 100 AND col1 <= 1,000col1 > 100 AND col1 <= 1,000 col1 > 1000col1 > 1000

9.I. 열에 uniqueidentifier 데이터 형식 사용Using the uniqueidentifier data type in a column

다음 예에서는 uniqueidentifier 열이 있는 테이블을 만듭니다.The following example creates a table with a uniqueidentifier column. 이 예에서는 PRIMARY KEY 제약 조건을 사용하여 사용자가 중복 값을 삽입하지 못하도록 테이블을 보호하고 NEWSEQUENTIALID() 제약 조건의 DEFAULT 함수를 사용하여 새 행에 대한 값을 제공합니다.The example uses a PRIMARY KEY constraint to protect the table against users inserting duplicated values, and it uses the NEWSEQUENTIALID() function in the DEFAULT constraint to provide values for new rows. uniqueidentifier 열을 $ROWGUID 키워드로 참조할 수 있도록 이 열에 ROWGUIDCOL 속성이 적용됩니다.The ROWGUIDCOL property is applied to the uniqueidentifier column so that it can be referenced using the $ROWGUID keyword.

CREATE TABLE dbo.Globally_Unique_Data  
    (guid uniqueidentifier   
        CONSTRAINT Guid_Default DEFAULT   
        NEWSEQUENTIALID() ROWGUIDCOL,  
    Employee_Name varchar(60)  
    CONSTRAINT Guid_PK PRIMARY KEY (guid) );  

10.J. 계산 열에 식 사용Using an expression for a computed column

다음 예에서는 (low + high)/2 계산 열을 계산하기 위해 식(myavg)을 사용하는 방법을 보여 줍니다.The following example shows the use of an expression ((low + high)/2) for calculating the myavg computed column.

CREATE TABLE dbo.mytable   
    ( low int, high int, myavg AS (low + high)/2 ) ;  

11.K. 사용자 정의 형식의 열을 기반으로 계산 열 만들기Creating a computed column based on a user-defined type column

다음 예에서는 유형의 어셈블리와 유형 자체를 현재 데이터베이스에 이미 만들었다고 가정하고 사용자 정의 형식 utf8string으로 정의된 하나의 열을 가진 테이블을 만드는 방법을 보여 줍니다.The following example creates a table with one column defined as user-defined type utf8string, assuming that the type's assembly, and the type itself, have already been created in the current database. 두 번째 열은 utf8string을 기반으로 정의되며 type(class)utf8stringToString() 메서드를 사용하여 해당 열에 대한 값을 계산합니다.A second column is defined based on utf8string, and uses method ToString() of type(class)utf8string to compute a value for the column.

CREATE TABLE UDTypeTable   
    ( u utf8string, ustr AS u.ToString() PERSISTED ) ;  

12.L. 계산 열에 USER_NAME 함수 사용Using the USER_NAME function for a computed column

다음 예에서는 USER_NAME() 열에 myuser_name 함수를 사용하는 방법을 보여 줍니다.The following example uses the USER_NAME() function in the myuser_name column.

CREATE TABLE dbo.mylogintable  
    ( date_in datetime, user_id int, myuser_name AS USER_NAME() ) ;  

13.M. FILESTREAM 열이 있는 테이블 만들기Creating a table that has a FILESTREAM column

다음 예에서는 FILESTREAMPhoto가 있는 테이블을 만듭니다.The following example creates a table that has a FILESTREAM column Photo. 하나 이상의 FILESTREAM 열이 있는 테이블에는 하나의 ROWGUIDCOL 열이 있어야 합니다.If a table has one or more FILESTREAM columns, the table must have one ROWGUIDCOL column.

CREATE TABLE dbo.EmployeePhoto  
    (  
    EmployeeId int NOT NULL PRIMARY KEY,  
    ,Photo varbinary(max) FILESTREAM NULL  
    ,MyRowGuidColumn uniqueidentifier NOT NULL ROWGUIDCOL  
        UNIQUE DEFAULT NEWID()  
    );  

14.N. 행 압축을 사용하는 테이블 만들기Creating a table that uses row compression

다음 예에서는 행 압축을 사용하는 테이블을 만듭니다.The following example creates a table that uses row compression.

CREATE TABLE dbo.T1   
(c1 int, c2 nvarchar(200) )  
WITH (DATA_COMPRESSION = ROW);  

데이터 압축 예제를 더 보려면 데이터 압축을 참조하세요.For additional data compression examples, see Data Compression.

15.O. 스파스 열 및 열 집합이 있는 테이블 만들기Creating a table that has sparse columns and a column set

다음 예에서는 스파스 열이 있는 테이블과 두 개의 스파스 열 및 열 집합이 있는 테이블을 만드는 방법을 보여 줍니다.The following examples show to how to create a table that has a sparse column, and a table that has two sparse columns and a column set. 이 예에서는 기본 구문을 사용합니다.The examples use the basic syntax. 더 복잡한 예제를 보려면 스파스 열 사용열 집합 사용을 참조하세요.For more complex examples, see Use Sparse Columns and Use Column Sets.

이 예에서는 스파스 열이 있는 테이블을 만듭니다.This example creates a table that has a sparse column.

CREATE TABLE dbo.T1  
    (c1 int PRIMARY KEY,  
    c2 varchar(50) SPARSE NULL ) ;  

이 예에서는 두 개의 스파스 열과 CSet이라는 열 집합이 있는 테이블을 만듭니다.This example creates a table that has two sparse columns and a column set named CSet.

CREATE TABLE T1  
    (c1 int PRIMARY KEY,  
    c2 varchar(50) SPARSE NULL,  
    c3 int SPARSE NULL,  
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ) ;  

16.P. 시스템 버전 디스크 기반 임시 테이블 만들기Creating a system-versioned disk-based temporal table

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

다음 예제는 새 기록 테이블에 연결된 임시 테이블을 만드는 방법 및 기존 기록 테이블에 연결된 임시 테이블을 만드는 방법을 보여 줍니다.The following examples show how to create a temporal table linked to a new history table, and how to create a temporal table linked to an existing history table. 참고로 임시 테이블은 시스템 버전 관리를 활성화하려면 테이블에 대해 정의된 기본 키를 활성화해야 합니다.Note that the temporal table must have a primary key defined to be enabled for the table to be enabled for system versioning. 예를 들어 기존 테이블에 대한 시스템 버전 관리를 추가 또는 제거하는 방법을 보여 주는 예제는 예제의 시스템 버전 관리를 참조하세요.For examples showing how to add or remove system versioning on an existing table, see System Versioning in Examples. 사용 사례는 임시 테이블을 참조하세요.For use cases, see Temporal Tables.

이 예제에서는 새 기록 테이블에 연결된 새 임시 테이블을 만듭니다.This example creates a new temporal table linked to a new history table.

CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)     
)  
WITH (SYSTEM_VERSIONING = ON);  

이 예제에서는 기존 기록 테이블에 연결된 새 임시 테이블을 만듭니다.This example creates a new temporal table linked to an existing history table.


--Existing table   
CREATE TABLE Department_History   
(  
    DepartmentNumber char(10) NOT NULL,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 NOT NULL,   
    SysEndTime datetime2 NOT NULL   
);  
--Temporal table  
CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID INT  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)    
)  
WITH   
    (SYSTEM_VERSIONING = ON   
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )  
    );  

17.Q. 시스템 버전 관리 메모리 최적화 임시 테이블 만들기Creating a system-versioned memory-optimized temporal table

적용 대상: SQL Server 2016(13.x)SQL Server 2016 (13.x)부터 SQL Server 2017SQL Server 2017Azure SQL 데이터베이스Azure SQL Database까지.Applies to: SQL Server 2016(13.x)SQL Server 2016 (13.x) through SQL Server 2017SQL Server 2017 and Azure SQL 데이터베이스Azure SQL Database.

다음 예제는 새 디스크 기반 기록 테이블에 연결된 시스템 버전 관리 메모리 최적화 임시 테이블을 만드는 방법을 보여 줍니다.The following example shows how to create a system-versioned memory-optimized temporal table linked to a new disk-based history table.

이 예제에서는 새 기록 테이블에 연결된 새 임시 테이블을 만듭니다.This example creates a new temporal table linked to a new history table.

CREATE SCHEMA History  
GO  
CREATE TABLE dbo.Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY NONCLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)     
)  
WITH   
    (  
        MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA,  
            SYSTEM_VERSIONING = ON ( HISTORY_TABLE = History.DepartmentHistory )   
    );  

이 예제에서는 기존 기록 테이블에 연결된 새 임시 테이블을 만듭니다.This example creates a new temporal table linked to an existing history table.


--Existing table   
CREATE TABLE Department_History   
(  
    DepartmentNumber char(10) NOT NULL,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID int  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 NOT NULL,   
    SysEndTime datetime2 NOT NULL   
);  
--Temporal table  
CREATE TABLE Department   
(  
    DepartmentNumber char(10) NOT NULL PRIMARY KEY CLUSTERED,   
    DepartmentName varchar(50) NOT NULL,   
    ManagerID INT  NULL,   
    ParentDepartmentNumber char(10) NULL,   
    SysStartTime datetime2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,   
    SysEndTime datetime2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,     
    PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime)    
)  
WITH   
    (SYSTEM_VERSIONING = ON   
        (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON )  
    );  

18.R. 암호화된 열이 있는 테이블 만들기Creating a table with encrypted columns

다음 예제에서는 암호화된 열 두 개가 있는 테이블을 만듭니다.The following example creates a table with two encrypted columns. 자세한 내용은 상시 암호화(데이터베이스 엔진#41;를 참조하세요.For more information, see Always Encrypted (Database Engine).

CREATE TABLE Customers (  
    CustName nvarchar(60)   
        ENCRYPTED WITH   
            (  
             COLUMN_ENCRYPTION_KEY = MyCEK,  
             ENCRYPTION_TYPE = RANDOMIZED,  
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
            ),   
    SSN varchar(11) COLLATE  Latin1_General_BIN2  
        ENCRYPTED WITH   
            (  
             COLUMN_ENCRYPTION_KEY = MyCEK,  
             ENCRYPTION_TYPE = DETERMINISTIC ,  
             ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'  
            ),   
    Age int NULL  
);  

S.는S. 인라인 필터링된 인덱스 만들기Create an inline filtered index

인라인 필터링된 인덱스가 있는 테이블을 만듭니다.Creates a tables with an inline filtered index.

CREATE TABLE t1 
(
    c1 int,
    index IX1  (c1) WHERE c1 > 0   
)
GO

참고 항목See Also

ALTER TABLE(Transact-SQL) ALTER TABLE (Transact-SQL)
COLUMNPROPERTY (Transact-SQL) COLUMNPROPERTY (Transact-SQL)
CREATE INDEX(Transact-SQL) CREATE INDEX (Transact-SQL)
CREATE VIEW(Transact-SQL) CREATE VIEW (Transact-SQL)
데이터 형식(Transact-SQL) Data Types (Transact-SQL)
DROP INDEX (Transact-SQL) DROP INDEX (Transact-SQL)
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)
DROP TABLE(Transact-SQL) DROP TABLE (Transact-SQL)
CREATE PARTITION FUNCTION(Transact-SQL) CREATE PARTITION FUNCTION (Transact-SQL)
CREATE PARTITION SCHEME(Transact-SQL) CREATE PARTITION SCHEME (Transact-SQL)
CREATE TYPE(Transact-SQL) CREATE TYPE (Transact-SQL)
EVENTDATA(Transact-SQL) EVENTDATA (Transact-SQL)
sp_help(Transact-SQL) sp_help (Transact-SQL)
sp_helpconstraint (Transact-SQL) sp_helpconstraint (Transact-SQL)
sp_rename(Transact-SQL) sp_rename (Transact-SQL)
sp_spaceused (Transact-SQL)sp_spaceused (Transact-SQL)