programing

#temptable과 #TempTable의 차이점

elseif 2023. 4. 14. 21:17

#temptable과 #TempTable의 차이점

#temptable ★★★★★★★★★★★★★★★★★」##TempTableSQL Server?

#table로컬 임시 테이블을 참조합니다.이 테이블을 작성한 사용자만 볼 수 있습니다.

##table글로벌 임시 테이블을 참조합니다.모든 사용자에게 표시됩니다.

#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' a'는 'a'입니다.##에서 테이블이 작성됩니다.제어 프로세스가 됩니다.프로세스에 대한 태스크가 없는 경우에도 이 프로세스가 아직 활성화되어 있으면 테이블에 삭제 플래그가 표시되지 않습니다. ''이(가) ''##테이블이 생성되고 테이블이 삭제됩니다.테이블에 대해 마지막 태스크가 실행될 때 테이블에는 삭제 태그가 부착됩니다.

을 사용법#테이블은 작성된 프로세스 범위 내에서만 사용할 수 있습니다. ##는 다른 테이블과 동일한 방법으로 사용할 수 있습니다.단, 이 테이블이 작성된 프로세스와 함께 존재하거나 존재 여부가 결정됩니다.

로컬 임시 테이블은 테이블을 처음 만들거나 참조할 때와 동일한 SQL Server 인스턴스에 연결하는 동안 작성자에게만 표시됩니다.사용자가 SQL Server 인스턴스에서 연결을 끊으면 로컬 임시 테이블이 삭제됩니다.글로벌 임시 테이블은 생성된 후 모든 사용자 및 연결에 표시되며 테이블을 참조하는 모든 사용자가 SQL Server 인스턴스에서 연결을 끊으면 삭제됩니다.

여기서부터 가져가다

자세한 것은 이쪽

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

  • 테이블 이름의 프리픽스로서 단일 해시 값 "#"으로 시작합니다.

  • Local Temporary Table은 로컬 임시 테이블이 있던 연결 전용입니다.
    창조했다.각 Local Temporary Table은 테이블 이름 끝에 랜덤 값이 있습니다.

  • Local Temporary Table은 기존 연결이 닫히면 자동으로 드롭됩니다.또한 사용자는 다음 명령어 "drop table #TempTable"을 사용하여 명시적으로 드롭할 수 있습니다.

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

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

##tempTable글로벌임시 테이블을 나타냅니다.

  • 테이블 이름의 접두사로 단일 해시 값 "##"으로 시작하고 이름은 항상 고유합니다.
  • 이름에는 랜덤 번호가 부가되지 않습니다.SQL Server의 모든 연결에서 글로벌 임시 테이블을 볼 수 있습니다.
  • Global Temporary Table은 테이블을 참조하는 마지막 연결이 닫혔을 때(Global Temporary Table을 작성한 경우)에만 파기됩니다.
  • 참조 연결이 열릴 때까지 SQL Server의 모든 연결에서 글로벌 임시 테이블에 액세스할 수 있습니다.

간단한 테스트 방법#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 테이블에 대한 선택 쿼리를 같은 세션의 쿼리 창에서 실행하면 쿼리 결과가 반환됩니다.

테이블은 테이블을 작성한 프로세스/접속이 종료될 때까지 표시/사용 가능하며 테이블을 작성한 세션에만 표시됩니다.

테이블은 글로벌하며 테이블 작성 프로세스/세션이 종료될 때까지 모든 사용자가 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/21011276/difference-between-temptable-and-temptable