두 세션이 같은 이름으로 #temp 테이블을 만들 수 있습니까?


17

임시 테이블 ( #myTable)을 만들고 커서를 사용하고 있습니다. 동시 사용자가 내 응용 프로그램을 통해 커서에 액세스 할 때 문제가 발생합니까? 같은 이름으로 별도의 임시 테이블을 만들 수 있습니까?

다음은 샘플 코드입니다.

Open cursor;
Fetch Next from cursor into @Variable_Temp_Table_Name;
Create table #myTable(pk int)
While @@Fetch_Status = 0
Begin    
Fetch Next from cursor into @Variable_Temp_Table_Name;
End 

답변:


20

SQL 서버는 항상 임시 테이블 이름 끝에 (임수 뒤에) 임의의 숫자를 추가합니다. 동시 사용자가 세션에서 동일한 이름으로 임시 테이블을 만들면 SQL 서버는 tempdb에 여러 임시 테이블을 만듭니다.

#TempTableSSMS에서 3 개의 다른 세션에서 호출 된 3 개의 임시 테이블을 만들었습니다 . 이제 tempdb로 이동하면 각 임시 테이블의 이름에 임의의 고유 한 문자열이 추가 된 임시 테이블을 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오


11

예, 여러 응용 프로그램에서 자체 #temp 테이블 복사본을 가져옵니다. 각 동시 세션에는 고유 한 격리 된 개체가 있으므로 #temp 테이블을 사용하는 것이 중요합니다. 이것은 #temp 테이블과 함께 커서를 사용하는지 여부와 관련이 없습니다 (어쨌든 커서가 필요하지 않다고 생각하지만 특별히 주석을 달기에 충분한 코드를 포함하지 않았습니다).

주석을 포함하도록 편집하십시오.

#temp 테이블을 사용하는 것에 대한 추가 사항은 테이블에 제약 조건을 추가 해야하는 경우 테이블이 세션에 고유하더라도 제약 조건이 적용되지 않고 두 번째 인스턴스가 표.


7
#temp 테이블을 사용하는 것에 대한 추가 사항은 테이블에 제약 조건을 추가 해야하는 경우 테이블이 세션에 고유하더라도 제약 조건이 적용되지 않고 두 번째 인스턴스가 표.
Aaron

1
@Aaron-명명되지 않은 제약 조건에 대한 설명을 답변으로 옮길 것을 제안합니다. 많은 사람들이 그 세부 사항을 망칩니다.
RLF

또한 사람이있는 경우주의 하지 전역 임시 테이블을 원하는, 그들은 그것을 선언 할 수 있습니다 ##likeThis.
underscore_d

@RLF와 Aaron : NEWID ()로 GUID를 생성하고 동적 SQL을 통해 제약 조건을 만들 수 있습니다. CREATE TABLE 문에 포함시키는 것만 큼 깨끗하지는 않지만 적어도 옵션입니다. 또한 임시 테이블에는 FK 제약 조건이 허용되지 않는다고 생각합니다 (일반적으로 제약 조건에 대해 말하면).
Solomon Rutzky

@srutzky-True이지만 명명 된 제약 조건은 일반적으로 코드에서 쉽게 참조 할 수 있도록 명명됩니다. NEWID ()를 사용하면 단순화가 제공되지 않지만 필요한 경우 NEWID를 찾기 위해 쿼리 할 수 ​​있습니다.
RLF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.