#temptable과 ## TempTable의 차이점은 무엇입니까?


답변:


34

#tableA를 말한다 지역 임시 테이블 - 볼을 만든 사용자 만에

##tableA를 의미 글로벌 임시 테이블 - 모든 사용자에게 표시


26

#TempTables사용자 또는 연결에만 국한되지 않습니다. 그것들은 그것들을 생성 한 프로세스와 생성 프로세스가 생성하는 모든 프로세스에 로컬입니다. 예를 들어 다음과 같은 경우 :

Declare @strDynamicSQL as varchar(8000)

Set @strDynamicSQL = 'Select GetDate() As TheDate Into #TheDateTable'
Execute(@strDynamicSQL)

Select *
From #TheDateTable

다음과 같은 오류가 발생합니다.

메시지 208, 수준 16, 상태 0, 줄 7 잘못된 개체 이름 '#TheDateTable'.

하지만 내가 할 경우 :

Declare @strDynamicSQL as varchar(8000)

Create Table #TheDateTable (
    TheDate     DateTime
)

Set @strDynamicSQL = 'Insert Into #TheDateTable Select GetDate() As TheDate'
Execute(@strDynamicSQL)

Select *
From #TheDateTable

오류가 없습니다.

첫 번째 예에서 Execute문은 생성 된 프로세스에서 발생합니다. 테이블이 반환되면 해당 프로세스에서 생성되므로 해당 프로세스는 사라집니다. 그리고 그 과정에서 테이블은 "안녕"입니다.

두 번째 예에서 테이블은 최상위 프로세스에 의해 생성됩니다. 그런 다음 생성 된 프로세스에서 상호 작용합니다. 테이블은 생성 된 프로세스와 생성되는 모든 프로세스에서 사용할 수 있습니다.

##tables이거 깰. 상기 프로세스 ##테이블에 작성되어 제어 처리 될 것이다. 해당 프로세스에 대한 작업이없는 경우에도이 프로세스가 여전히 활성 상태이면 테이블에 제거 플래그가 지정되지 않습니다. ##테이블이 생성 된 프로세스가 사라지면 테이블에 대해 마지막 작업이 실행될 때 제거하도록 테이블에 태그가 지정됩니다.

여기에 그것을 보는 간단한 방법이 있습니다. #테이블은 생성 된 프로세스의 범위에서만 사용할 수 있습니다. ##테이블은 생성 된 프로세스와 함께 존재한다는 점을 제외하고는 다른 테이블과 동일한 방식으로 사용할 수 있습니다.


10

로컬 임시 테이블은 테이블을 처음 만들거나 참조 할 때와 동일한 SQL Server 인스턴스에 연결하는 동안 작성자 만 볼 수 있습니다. 사용자가 SQL Server 인스턴스에서 연결을 끊으면 로컬 임시 테이블이 삭제됩니다. 전역 임시 테이블은 만들어진 후 모든 사용자와 모든 연결에 표시되며 테이블을 참조하는 모든 사용자가 SQL Server 인스턴스에서 연결이 끊어지면 삭제됩니다.

여기에서 찍은

이것에 대해 더 알아보기


4

간단한 테스트 방법 #localtable and ##globaltable

다른 SQL 쿼리 창에서 시도하십시오.

create table ##globaltemptable (id int )
go
insert into ##globaltemptable values (1)
go
select * from ##globaltemptable

다른 SQL 쿼리 창에서 시도하십시오.

create table #localtemptable (id int )
go
insert into #localtemptable values (1)
go
select * from #localtemptable

이제 테이블에 대한 선택 쿼리를 실행하면 전역 창 구문에서 #localtemptable 다음과 같은 오류가 발생합니다.

Invalid object name '#localtemptable'.

동일한 세션의 쿼리 창에서 테이블에 대한 선택 쿼리를 실행하는 동안 ## globaltemptable 쿼리 결과가 반환됩니다.


0

테이블을 생성 한 프로세스 / 연결이 종료 될 때까지 테이블을 생성 한 세션에만 표시 / 사용할 수 있습니다.

테이블은 전역 적이며 테이블을 생성 한 프로세스 / 세션이 종료 될 때까지 모든 사람이 사용할 수 있습니다.


0

"#"는 로컬 임시 테이블을 나타냅니다.

  • 테이블 이름의 접두사로 단일 해시 값 "#"으로 시작합니다.

  • 로컬 임시 테이블은
    생성 된 연결에만 사용됩니다 . 각 로컬 임시 테이블에는 테이블 이름 끝에 임의의 값이 있습니다.

  • 로컬 임시 테이블은 기존 연결이 닫힐 때 자동으로 삭제되거나 사용자가 "drop table #TempTable"명령을 사용하여 명시 적으로 삭제할 수 있습니다.

  • 임시 테이블이 저장 프로 시저에서 생성 된 경우 저장 프로 시저 실행이 완료되면 자동으로 삭제됩니다.

  • 이름은 같지만 연결이 다른 로컬 임시 테이블을 만들 수 있으며 다양한 임의 값과 함께 동일한 이름으로 저장됩니다.

"##"는 전역 임시 테이블을 나타냅니다.

  • 테이블 이름의 접두사로 단일 해시 값 "##"으로 시작하며 이름은 항상 고유합니다.
  • 이름에 임의의 숫자가 추가되지 않았습니다. 전역 임시 테이블은 SQL Server의 모든 연결에 표시됩니다 .Global Temporary Tables are visible to all connections of SQL Server.
  • 글로벌 임시 테이블은 테이블을 참조하는 마지막 연결이 닫힐 때만 파괴됩니다 (글로벌 임시 테이블을 생성했습니다).
  • 참조 연결이 열릴 때까지 SQL Server의 모든 연결에서 전역 임시 테이블에 액세스 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.