code

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

codestyles 2020. 12. 13. 09:35
반응형

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


당신은 차이를 설명시겠습니까 #temptable##TempTableSQL 서버에 있습니다. 나는 이것에 대해 봤지만 답을 찾을 수 없습니다.

이것에 대해 저를 도와주세요


`#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이것을 부수십시오. 상기 프로세스 ##테이블에 작성되어 제어 처리 될 것이다. 해당 프로세스에 대한 작업이없는 경우에도이 프로세스가 여전히 활성 상태이면 테이블에 제거 플래그가 지정되지 않습니다. ## 테이블이 생성 된 프로세스가 사라지면 테이블에 대해 마지막 작업이 실행될 때 제거하도록 테이블에 태그가 지정됩니다.

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


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

Now if you run the select query for the table : #localtemptable in the global window syntax , you will get an error as follows :-

Invalid object name '#localtemptable'.

While you run the select query for the table : ##globaltemptable in any query window of the same session, you will get the query results return.


The table will be visible/available up until the process/connection that created it ends and only to the session that created it.

The table is global and will be available to everyone until the process/session that created it is ended.

참고URL : https://stackoverflow.com/questions/21011276/difference-between-temptable-and-temptable

반응형