SQL Server에서 @ 테이블, # 테이블 및 ## 테이블의 차이점은 무엇입니까?
SQL Server에서 @ 테이블, # 테이블 및 ## 테이블의 차이점은 무엇입니까?
답변:
#table 로컬 (생성 한 사용자 만 볼 수 있음) 임시 테이블을 나타냅니다.
##table 전역 (모든 사용자에게 표시됨) 임시 테이블을 나타냅니다.
@variableName 유형에 따라 값을 보유 할 수있는 변수를 나타냅니다.
#그리고 ##테이블은 임시 데이터베이스에 표현 실제 테이블입니다. 이러한 테이블에는 인덱스와 통계가있을 수 있으며 세션의 sproc에서 액세스 할 수 있습니다 (전역 임시 테이블의 경우 세션 전체에서 사용 가능).
@table은 테이블 변수입니다.
#table과 @table의 차이점에 집중하겠습니다. ## table은 전역 임시 테이블이며 SQL Server를 10 년 넘게 사용한 기록으로는 아직 유효한 사용 사례를 발견하지 못했습니다. 일부가 존재한다고 확신하지만 개체의 특성으로 인해 IMHO를 매우 사용할 수 없습니다.
@marc_s의 @whiner에 대한 응답은 절대적으로 사실입니다. 테이블 변수가 항상 메모리에 상주한다는 것은 널리 알려진 신화입니다. 실제로 테이블 변수가 디스크로 이동하여 임시 테이블처럼 작동하는 것은 매우 일반적입니다.
어쨌든 @Astander가 지적한 링크를 따라 차이점을 읽는 것이 좋습니다. 대부분의 차이점은 @table 변수로 할 수없는 작업에 대한 제한을 포함합니다.
CREATE TABLE #t
해당 CONNECTION에서만 볼 수있는 테이블을 만들고 다른 연결을 만든 동일한 사용자는 다른 연결에서 #t 테이블을 볼 수 없습니다.
CREATE TABLE ##t
다른 연결에 표시되는 임시 테이블을 만듭니다. 그러나 연결 생성이 종료되면 테이블이 삭제됩니다.
SqlConnection.Open()와 동일한 연결 문자열 은 IS 같은 연결은 ?