#temptable과 ## TempTable의 차이점은 무엇입니까?
당신은 차이를 설명시겠습니까 #temptable
및 ##TempTable
SQL 서버에 있습니다. 나는 이것에 대해 봤지만 답을 찾을 수 없습니다.
이것에 대해 저를 도와주세요
`#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
'code' 카테고리의 다른 글
git에서 여러 숨김을 결합하는 방법 (0) | 2020.12.14 |
---|---|
IntelliJ를 사용하여 두 개의 임의 파일 비교 (0) | 2020.12.14 |
C ++ 11에 void 포인터 비교에 대한 이상한 절이 포함 된 이유는 무엇입니까? (0) | 2020.12.13 |
ReSharper 7.x를 VS2013 미리보기와 함께 사용할 수 있습니까? (0) | 2020.12.13 |
Eclipse가 Visual Studio처럼 동작하도록 만들기 (0) | 2020.12.13 |