테이블 ( Transact - SQL ) - SQL Server | Microsoft Docs 
 table ( Transact - SQL ) table ( Transact - SQL ) 
 나중 에 처리 하 기 위해 결과 집합 을 저장 하 는 데 사용 되 는 특별 한 데이터 형식 입니다 . Is a special data type used to store a result set for processing at a later time . table 은 주로 테이블 반환 함수 의 결과 집합 으로 반환 되 는 행 집합 을 임시 로 저장 하 는 데 사용 됩니다 . table is primarily used for temporarily storing a set of rows that are returned as the table - valued function result set . 테이블 은 주로 테이블 반환 함수 의 결과 집합 으로 반환 되 는 행 집합 을 임시 로 저장 하 는 데 사용 됩니다 . Functions and variables can be declared to be of type table . 테이블 변수 는 함수 , 저장 프로시저 및 일괄 처리 에 사용 할 수 있 습니다 . table variables can be used in functions , stored procedures , and batches . 테이블 유형 의 변수 를 선언 하 려면 DECLARE @ local _ variable 를 사용 합니다 . To declare variables of type table , use DECLARE @ local _ variable . 
 적용 대상 : SQL ServerSQL Server ( SQL Server 2008 SQL Server 2008 ~ SQL Server 2017 SQL Server 2017 ) , Azure SQL 데이터베이스 Azure SQL DatabaseApplies to : SQL ServerSQL Server ( SQL Server 2008 SQL Server 2008 through SQL Server 2017 SQL Server 2017 ) , Azure SQL 데이터베이스 Azure SQL Database . 
 CREATE TABLE 에서 테이블 을 정의 하 는 데 사용 되 는 정보 의 같 은 하위 집합 입니다 . Is the same subset of information that is used to define a table in CREATE TABLE . 테이블 선언 에 는 열 정의 , 이름 , 데이터 형식 및 제약 조건 등 이 포함 되 며 The table declaration includes column definitions , names , data types , and constraints . 허용 되 는 제약 조건 유형 은 PRIMARY KEY , UNIQUE KEY 및 NULL 뿐 입니다 . The only constraint types allowed are PRIMARY KEY , UNIQUE KEY , and NULL . 
 구문 에 대한 자세 한 내용 은 CREATE TABLE ( Transact - SQL ) , CREATE FUNCTION ( Transact - SQL ) 및 DECLARE @ local _ variable ( Transact - SQL ) 을 참조 하 세요 . For more information about the syntax , see CREATE TABLE ( Transact - SQL ) , CREATE FUNCTION ( Transact - SQL ) , and DECLARE @ local _ variable ( Transact - SQL ) . 
 MicrosoftMicrosoft Windows 로 캘 및 비교 스타일 , Windows 로 캘 및 이진 표기법 또는 MicrosoftMicrosoft SQL ServerSQL Server 데이터 정렬 로 구성 된 열 의 데이터 정렬 입니다 . Is the collation of the column that is made up of a MicrosoftMicrosoft Windows locale and a comparison style , a Windows locale , and the binary notation , or a MicrosoftMicrosoft SQL ServerSQL Server collation . collation _ definition 을 지정 하 지 않 으면 현재 데이터베이스 의 데이터 정렬 이 해당 열 에 상속 됩니다 . If collation _ definition isn ' t specified , the column inherits the collation of the current database . 또는 CLR ( 공용 언어 런타임 ) 사용 자 정의 형식 으로 열 을 정의 할 경우 사용 자 정의 형식 의 데이터 정렬 이 해당 열 에 상속 됩니다 . Or if the column is defined as a common language runtime ( CLR ) user - defined type , the column inherits the collation of the user - defined type . 
 테이블 다음 예 에서 와 같이 일괄 처리 의 FROM 절 에서 이름 으로 변수 를 참조 합니다 . table Reference variables by name in a batch ' s FROM clause , as shown the following example : 
 FROM 절 밖 에서 는 다음 예 에서 와 같이 별칭 을 사용 하 여 테이블 변수 를 참조 해야 합니다 . Outside a FROM clause , table variables must be referenced by using an alias , as shown in the following example : 
 테이블 변수 는 변경 되 지 않 는 쿼리 계획 이 있 는 소규모 쿼리 의 경우 와 다시 컴파일 기능 이 중요 한 경우 에 다음 과 같 은 이점 을 제공 합니다 . table variables provide the following benefits for small - scale queries that have query plans that don ' t change and when recompilation concerns are dominant : 
 테이블 변수 는 지역 변수 처럼 작동 하 며 A table variable behaves like a local variable . 잘 정의 된 범위 를 가집니다 . It has a well - defined scope . 이 변수 는 변수 가 선언 된 함수 , 저장 프로시저 또는 일괄 처리 입니다 . This variable is the function , stored procedure , or batch that it ' s declared in . 
 범위 내 에서 일반 테이블 처럼 테이블 변수 를 사용 할 수 있 으며 Within its scope , a table variable can be used like a regular table . SELECT , INSERT , UPDATE 및 DELETE 문 에서 테이블 또는 테이블 식이 사용 되 는 어디 에 나 적용 할 수 있 습니다 . It may be applied anywhere a table or table expression is used in SELECT , INSERT , UPDATE , and DELETE statements . 그러나 다음 문 에서 는 테이블 을 사용 할 수 없 습니다 . However , table can ' t be used in the following statement : 
 테이블 변수 는 변수 가 정의 된 함수 , 저장 프로시저 및 일괄 처리 가 끝나 면 자동 으로 정리 됩니다 . table variables are automatically cleaned up at the end of the function , stored procedure , or batch in which they ' re defined . 
 저장 프로시저 에 테이블 변수 를 사용 하 면 성능 에 영향 을 주 는 비용 기반 선택 사항 이 없 는 경우 임시 테이블 을 사용 할 때 보다 저장 프로 시저 를 다시 컴파일 하 는 횟수 가 줄어듭니다 . table variables that are used in stored procedures cause fewer stored procedure recompilations than when temporary tables are used when there are no cost - based choices that affect performance . 
 테이블 변수 와 관련 된 트랜잭션 은 테이블 변수 가 업데이트 되 는 동안 만 지속 됩니다 . Transactions involving table variables last only for the duration of an update on the table variable . 따라서 테이블 변수 를 사용 하 면 리소스 의 잠금 과 로 깅에 대한 요구 가 줄어듭니다 . As such , table variables require less locking and logging resources . 
 테이블 변수 에 는 배포 통계 가 없 습니다 . Table variables don ' t have distribution statistics . 이 변수 는 다시 컴파일 을 트리 거하 지 않 습니다 . They won ' t trigger recompiles . 대부분 의 경우 최적화 프로그램 은 테이블 변수 에 행 이 없 다는 가정 하 에 쿼리 계획 을 빌 드 합니다 . In many cases , the optimizer will build a query plan on the assumption that the table variable has no rows . 이러 한 이유 로 , 많 은 수 의 행 ( 100 개 이상 ) 을 예상 하 는 경우 테이블 변수 를 사용 할 때 주의 해야 합니다 . For this reason , you should be cautious about using a table variable if you expect a larger number of rows ( greater than 100 ) . 이러 한 경우 임시 테이블 이 좋 은 해결책 일 수 있 습니다 . Temp tables may be a better solution in this case . 테이블 변수 를 다른 테이블 에 조인 하 는 쿼리 의 경우 RECOMPILE 힌트 를 사용 하 세요 . 그러면 최적화 프로그램 이 테이블 변수 에 올바른 카디널 리티 를 사용 합니다 . For queries that join the table variable with other tables , use the RECOMPILE hint , which will cause the optimizer to use the correct cardinality for the table variable . 
 SQL ServerSQL Server 최적화 프로그램 의 비용 기반 추론 모델 에서 는 테이블 변수 가 지원 되 지 않 습니다 . table variables aren ' t supported in the SQL ServerSQL Server optimizer ' s cost - based reasoning model . 따라서 효율 적 인 쿼리 계획 을 얻 기 위해 비용 기반 선택 이 필요 한 경우 에 는 이 변수 를 사용 하 면 안 됩니다 . As such , they shouldn ' t be used when cost - based choices are required to achieve an efficient query plan . 비용 기반 선택 이 필요 한 경우 에 는 임시 테이블 이 적절 합니다 . Temporary tables are preferred when cost - based choices are required . 이 계획 에 는 일반 적 으로 조인 , 병렬 처리 결정 및 인덱스 선택 사항 선택 을 사용 하 는 쿼리 가 포함 됩니다 . This plan typically includes queries with joins , parallelism decisions , and index selection choices . 
 테이블 변수 를 수정 하 는 쿼리 는 병렬 쿼리 실행 계획 을 생성 하 지 않 습니다 . Queries that modify table variables don ' t generate parallel query execution plans . 큰 테이블 변수 나 복잡 한 쿼리 의 테이블 변수 를 수정 하 면 성능 에 영향 을 줄 수 있 습니다 . Performance can be affected when large table variables , or table variables in complex queries , are modified . 테이블 변수 가 수정 되 는 경우 에 는 임시 테이블 을 대신 사용 하 는 것 이 좋 습니다 . Consider using temporary tables instead in situations where table variables are modified . 자세 한 내용 은 CREATE TABLE ( Transact - SQL ) 을 참조 하 세요 . For more information , see CREATE TABLE ( Transact - SQL ) . 수정 하 지 않 고 테이블 변수 를 읽 는 쿼리 는 병렬 처리 할 수 있 습니다 . Queries that read table variables without modifying them can still be parallelized . 
 명시 적 으로 테이블 변수 에 대한 인덱스 를 만들 수 없 으며 테이블 변수 에 대한 통계 는 유지 되 지 않 습니다 . Indexes can ' t be created explicitly on table variables , and no statistics are kept on table variables . SQL Server 2014 ( 12 . x ) SQL Server 2014 ( 12 . x ) 부터 , 테이블 정의 와 함께 특정 인덱스 유형 을 인라인 으로 만들 수 있 는 새 구문 이 도입 되 었 습니다 . Starting with SQL Server 2014 ( 12 . x ) SQL Server 2014 ( 12 . x ) , new syntax was introduced which allows you to create certain index types inline with the table definition . 이 새 구문 을 사용 하 여 테이블 정의 의 일부 로 테이블 변수 의 인덱스 를 만들 수 있 습니다 . Using this new syntax , you can create indexes on table variables as part of the table definition . 경우 에 따라 전체 인덱스 지원 과 통계 를 제공 하 는 임시 테이블 을 대신 사용 하 여 성능 을 향상 할 수 도 있 습니다 . In some cases , performance may improve by using temporary tables instead , which provide full index support and statistics . 임시 테이블 및 인라인 인덱스 만들 기 에 대한 자세 한 내용 은 CREATE TABLE ( Transact - SQL ) 을 참조 하 세요 . For more information about temporary tables and inline index creation , see CREATE TABLE ( Transact - SQL ) . 
 테이블 형식 선언 내 의 CHECK 제약 조건 , DEFAULT 값 및 계산 열 은 사용 자 정의 함수 를 호출 할 수 없 습니다 . CHECK constraints , DEFAULT values , and computed columns in the table type declaration can ' t call user - defined functions . 
 테이블 변수 간 의 할당 작업 은 지원 되 지 않 습니다 . Assignment operation between table variables isn ' t supported . 
 테이블 변수 는 제한 된 범위 를 가지 며 영구 데이터베이스 의 일부 가 아니 므로 트랜잭션 롤백 의 영향 을 받 지 않 습니다 . Because table variables have limited scope and aren ' t part of the persistent database , transaction rollbacks don ' t affect them . 
 테이블 변수 는 생 성 후 변경 할 수 없 습니다 . Table variables can ' t be altered after creation . 
 테이블 변수 지연 컴파일 Table variable deferred compilation 
 테이블 변수 지연 컴파일 은 테이블 변수 를 참조 하 는 쿼리 의 플랜 품질 및 전체 성능 을 개선 합니다 . Table variable deferred compilation improves plan quality and overall performance for queries referencing table variables . 최적 화 및 초기 플랜 컴파일 중 에 이 기능 은 실제 테이블 변수 행 수 를 기반 으로 하 는 카디널 리티 예측 을 전파 합니다 . During optimization and initial plan compilation , this feature will propagate cardinality estimates that are based on actual table variable row counts . 이 정확 한 행 수 정보 는 다운 스트림 계획 작업 을 최적 화 하 는 데 사용 됩니다 . This exact row count information will then be used for optimizing downstream plan operations . 
 테이블 변수 지연 컴파일 은 Azure SQL 데이터베이스 Azure SQL Database 및 SQL Server 2019 ( 15 . x ) SQL Server 2019 ( 15 . x ) 의 공개 미리 보 기 기능 입니다 . Table variable deferred compilation is a public preview feature in Azure SQL 데이터베이스 Azure SQL Database and SQL Server 2019 ( 15 . x ) SQL Server 2019 ( 15 . x ) . 
 테이블 변수 지연 컴파일 을 사용 하 면 테이블 변수 를 참조 하 는 문 컴파일 은 문 이 실제로 처음 실행 될 때 까지 지연 됩니다 . With table variable deferred compilation , compilation of a statement that references a table variable is deferred until the first actual execution of the statement . 이 지연 컴파일 동작 은 임시 테이블 의 동작 과 동일 합니다 . This deferred compilation behavior is identical to the behavior of temporary tables . 이 변경 으로 인해 원래 1 행 추측 대신 에 실제 카디널 리티 가 사용 됩니다 . This change results in the use of actual cardinality instead of the original one - row guess . 
 테이블 변수 지연 컴파일 의 공개 미리 보 기 를 사용 하 도록 설정 하 려면 쿼리 가 실행 될 때 연결 된 데이터베이스 의 데이터베이스 호환 성 수준 150 을 사용 하 도록 설정 합니다 . To enable the public preview of table variable deferred compilation , enable database compatibility level 150 for the database you ' re connected to when the query runs . 
 테이블 변수 지연 컴파일 은 테이블 변수 의 다른 특성 을 변경 하 지 않 습니다 . Table variable deferred compilation doesn ' t change any other characteristics of table variables . 예 를 들 어 이 기능 은 테이블 변수 에 열 통계 를 추가 하 지 않 습니다 . For example , this feature doesn ' t add column statistics to table variables . 
 테이블 변수 지연 컴파일 은 다시 컴파일 빈도 를 늘리 지 않 습니다 . Table variable deferred compilation doesn ' t increase recompilation frequency . 대신 초기 컴파일 이 발생 하 는 위치 를 이동 합니다 . Rather , it shifts where the initial compilation occurs . 그 결과 로 캐시 된 계획 은 초기 지연 컴파일 테이블 변수 행 개수 를 기반 으로 생성 됩니다 . The resulting cached plan generates based on the initial deferred compilation table variable row count . 캐시 된 계획 은 연속 쿼리 에서 다시 사용 됩니다 . The cached plan is reused by consecutive queries . 해당 계획 은 계획 이 제거 되 거나 다시 컴파일 될 때 까지 다시 사용 됩니다 . It ' s reused until the plan is evicted or recompiled . 
 초기 계획 컴파일 에 사용 되 는 테이블 변수 행 개수 는 일반 적 인 값 이 고정 된 행 개수 추측 과 다를 수 있 음 을 나타냅니다 . Table variable row count that is used for initial plan compilation represents a typical value might be different from a fixed row count guess . 이러 한 행 개수 가 다른 경우 다운 스트림 작업 에 도움 이 됩니다 . If it ' s different , downstream operations will benefit . 테이블 변수 행 개수 가 실행 간 에 크 게 달라지 는 경우 , 이 기능 으로 성능 이 향상 되 지 않 을 수 있 습니다 . Performance may not be improved by this feature if the table variable row count varies significantly across executions . 
 호환 성 수준 을 변경 하 지 않 고 테이블 변수 지연 컴파일 비활성 화 Disabling table variable deferred compilation without changing the compatibility level 
 데이터베이스 호환 성 수준 150 이상 을 유지 하 면서 데이터베이스 또는 문 범위 에서 테이블 변수 지연 컴파일 을 사용 하 지 않 도록 설정 합니다 . Disable table variable deferred compilation at the database or statement scope while still maintaining database compatibility level 150 and higher . 데이터베이스 에서 발생 하 는 모든 쿼리 실행 에 대한 테이블 변수 지연 컴파일 을 사용 하 지 않 도록 설정 하 려면 해당 데이터베이스 의 컨텍스트 내 에서 다음 예제 를 실행 합니다 . To disable table variable deferred compilation for all query executions originating from the database , execute the following example within the context of the applicable database : 
 데이터베이스 에서 발생 하 는 모든 쿼리 실행 에 대한 테이블 변수 지연 컴파일 을 다시 사용 하 도록 설정 하 려면 해당 데이터베이스 의 컨텍스트 내 에서 다음 예제 를 실행 합니다 . To re - enable table variable deferred compilation for all query executions originating from the database , execute the following example within the context of the applicable database : 
 DISABLE _ DEFERRED _ COMPILATION _ TV 를 USE HINT 쿼리 힌트 로 할당 하 여 특정 쿼리 에 대한 테이블 변수 지연 컴파일 을 사용 하 지 않 도록 설정 할 수 도 있 습니다 . You can also disable table variable deferred compilation for a specific query by assigning DISABLE _ DEFERRED _ COMPILATION _ TV as a USE HINT query hint . 예 를 들 어 For example : 
 1 . A . 테이블 형식 의 변수 선언 Declaring a variable of type table 
 다음 예 에서 는 UPDATE 문의 OUTPUT 절 에서 지정 된 값 을 저장 하 는 table 변수 를 만듭니다 . The following example creates a table variable that stores the values specified in the OUTPUT clause of the UPDATE statement . 각각 SELECT 의 값 과 @ MyTableVar 테이블 의 업데이트 작업 결과 를 반환 하 는 두 개 의 Employee 문 이 이어집니다 . Two SELECT statements follow that return the values in @ MyTableVar and the results of the update operation in the Employee table . INSERTED . ModifiedDate 열 의 결과 값 은 Employee 테이블 의 ModifiedDate 열 값 과 다릅니다 . Results in the INSERTED . ModifiedDate column differ from the values in the ModifiedDate column in the Employee table . 이 차이 는 AFTER UPDATE 값 을 현재 날짜 로 업데이트 하 는 ModifiedDate 트리거 가 Employee 테이블 에 정의 되 어 있 기 때문 에 나타납니다 . This difference is because the AFTER UPDATE trigger , which updates the value of ModifiedDate to the current date , is defined on the Employee table . 그러나 OUTPUT 에서 반환 된 열 은 트리거 가 실행 되 기 전 의 데이터 를 반영 합니다 . However , the columns returned from OUTPUT reflect the data before triggers are fired . 자세 한 내용 은 OUTPUT Clause ( Transact - SQL ) 를 참조 하 세요 . For more information , see OUTPUT Clause ( Transact - SQL ) . 
 2 . B . 인라인 테이블 반환 함수 만들 기 Creating an inline table - valued function 
 다음 예 에서 는 인라인 테이블 반환 함수 를 반환 합니다 . The following example returns an inline table - valued function . ProductID 열 , Name 열 , 그리고 대리점 에 판매 된 각 제품 에 대한 대리점 별 총 연간 매출 의 집계 를 YTD Total 열 로 반환 합니다 . It returns three columns ProductID , Name , and the aggregate of year - to - date totals by store as YTD Total for each product sold to the store . 
 함수 를 호출 하 려면 이 쿼리 를 실행 하 세요 . To invoke the function , run this query . 
 테이블 반환 매개 변수 사용 ( Database Engine ) Use Table - Valued Parameters ( Database Engine )