티스토리 뷰

쿼리분석기나 엔터프라이 관리자 도움말 보면 됩니다.


임시 테이블

지역 및 전역 임시 테이블을 만들 수 있습니다. 지역 임시 테이블은 현재 세션에서만 볼 수 있으며 전역 임시 테이블은 모든 세션에서 볼 수 있습니다.

지역 임시 테이블 이름 앞에는 숫자 기호가 하나 추가되고(예: #table_name) 전역 임시 테이블 이름 앞에는 숫자 기호가 두 개 추가됩니다(예: ##table_name).

SQL 문은 CREATE TABLE 문의 table_name에 대해 지정된 값을 사용하여 임시 테이블을 참조합니다.

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)

여러 사용자가 동시에 실행할 수 있는 응용 프로그램 또는 저장 프로시저에서 지역 임시 테이블이 만들어지는 경우 SQL Server는 다른 사용자가 만든 테이블을 구별할 수 있어야 합니다. SQL Server는 각 지역 임시 테이블 이름에 내부적으로 숫자 접미사를 추가하여 구별합니다. tempdbsysobjects 테이블에 저장된 것과 같은 임시 테이블의 전체 이름은 CREATE TABLE 문에서 지정된 테이블 이름과 시스템에서 생성한 숫자 접미사로 구성됩니다. 접미사를 추가해야 하므로 지역 임시 이름으로 지정된 table_name은 116자를 초과할 수 없습니다.

임시 파일은 DROP TABLE을 사용하여 명시적으로 삭제하지 않는 한, 범위를 벗어나는 경우 자동으로 삭제됩니다.

  • 저장 프로시저에서 만들어진 지역 임시 테이블은 저장 프로시저가 완료될 때 자동으로 삭제됩니다. 테이블은 해당 테이블을 만든 저장 프로시저에 의해 실행되는 모든 중첩된 저장 프로시저에 의해 참조될 수 있습니다. 테이블은 테이블을 만든 저장 프로시저에 의해 호출된 프로세스에 의해서는 참조될 수 없습니다.

  • 기타 모든 지역 임시 테이블은 현재 세션이 끝날 때 자동으로 삭제됩니다.

  • 전역 임시 테이블은 테이블을 만든 세션이 끝나고 이를 참조하는 다른 모든 작업이 중지되면 자동으로 삭제됩니다. 작업과 테이블 간의 연결은 단일 Transact-SQL 문의 사용 기간 동안만 유지 관리됩니다. 즉, 전역 임시 테이블은 만들기 세션이 끝났을 때 테이블을 참조하는 마지막 Transact-SQL 문이 완료되면 삭제됩니다.

저장 프로시저 또는 트리거에서 만들어진 지역 임시 테이블은 저장 프로시저 또는 트리거가 호출되기 전에 만들어진 같은 이름의 임시 테이블과 구별됩니다. 쿼리가 임시 테이블을 참조하고 같은 이름의 두 임시 테이블이 동시에 존재하면 쿼리가 확인될 테이블이 정의되지 않습니다. 중첩된 저장 프로시저 또한 이를 호출한 저장 프로시저에 의해 만들어진 임시 테이블과 같은 이름의 임시 테이블을 만들 수 있습니다. 중첩된 저장 프로시저 내의 테이블 이름에 대한 모든 참조는 중첩된 프로시저에서 만들어진 테이블에 대해 확인됩니다. 예를 들어, 다음과 같습니다.

CREATE PROCEDURE Test2
AS
CREATE TABLE #t(x INT PRIMARY KEY)
INSERT INTO #t VALUES (2)
SELECT Test2Col = x FROM #t
GO
CREATE PROCEDURE 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

결과 집합은 다음과 같습니다.

Test1Col    
----------- 
1           

(1  적용됨)

Test2Col    
----------- 
2           

(1  적용됨)

지역 또는 전역 임시 테이블을 만들 때, CREATE TABLE 구문은 FOREIGN KEY 제약 조건을 제외한 다른 제약 조건 정의를 지원합니다. 임시 테이블에서 FOREIGN KEY 제약 조건이 지정된 경우에는 문이 제약 조건을 건너뛰었다는 경고 메시지를 반환하며 FOREIGN KEY 제약 조건 없이 테이블을 만듭니다. 임시 테이블은 FOREIGN KEY 제약 조건에서 참조할 수 없습니다.

임시 테이블 대신 테이블 변수를 사용할 수 있습니다. 임시 테이블은 인덱스를 명시적으로 만들어야 할 때 또는 여러 저장 프로시저 또는 함수에서 테이블 값을 볼 수 있어야 할 때 유용합니다. 일반적으로 테이블 변수를 사용하면 쿼리 처리의 성능이 향상됩니다. 자세한 내용은 table을 참조하십시오.


출처 : MSDN

댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Total
Today
Yesterday