차이 무엇 #temptable
과 ##TempTable
SQL Server의는?
차이 무엇 #temptable
과 ##TempTable
SQL Server의는?
답변:
#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
이제 테이블에 대한 선택 쿼리를 실행하면 전역 창 구문에서 #localtemptable 다음과 같은 오류가 발생합니다.
Invalid object name '#localtemptable'.
동일한 세션의 쿼리 창에서 테이블에 대한 선택 쿼리를 실행하는 동안 ## globaltemptable 쿼리 결과가 반환됩니다.
"#"는 로컬 임시 테이블을 나타냅니다.
테이블 이름의 접두사로 단일 해시 값 "#"으로 시작합니다.
로컬 임시 테이블은
생성 된 연결에만 사용됩니다 . 각 로컬 임시 테이블에는 테이블 이름 끝에 임의의 값이 있습니다.
로컬 임시 테이블은 기존 연결이 닫힐 때 자동으로 삭제되거나 사용자가 "drop table #TempTable"명령을 사용하여 명시 적으로 삭제할 수 있습니다.
임시 테이블이 저장 프로 시저에서 생성 된 경우 저장 프로 시저 실행이 완료되면 자동으로 삭제됩니다.
이름은 같지만 연결이 다른 로컬 임시 테이블을 만들 수 있으며 다양한 임의 값과 함께 동일한 이름으로 저장됩니다.
"##"는 전역 임시 테이블을 나타냅니다.