복붙노트

[SQL] SQL Server 2005 및 임시 테이블의 범위

SQL

SQL Server 2005 및 임시 테이블의 범위

나는 나의 관심사 중 하나에 대해 얘기하지 않는 것 임시 테이블 및 범위 그리고 내가 본 모든 해답의 대상이 주위에 읽었습니다.

내가 로컬 임시 테이블의 범위는 저장 프로 시저 또는 자녀 저장 프로 시저의 수명을 withing에 대해서만 유효 것으로 알고 있습니다. 그러나 concurency에 관한 상황은 무엇인가. 즉, 내가 두 개의 서로 다른 프로세스에서하지만 같은 사용자 / 연결 문자열에서 호출 임시 테이블을 생성 저장 프로 시저, 그 임시 테이블이 하나 저장 프로 시저에 두 통화 사이에 공유됩니다있다거나하는 경우가 될 것입니다 경우 저장 프로 시저를 호출 할 때마다 고유 한 임시 테이블의 인스턴스를 만듭니다.

나는 임시 테이블이 저장된 procdure에 대한 호출의 범위에 속한다는 것을 가정 할 것이다하지만 난이있는 경로 아래로 이동하기 전에 싶어요.

해결법

  1. ==============================

    1.지역 임시 테이블 (#으로 시작) 세션으로 제한됩니다; 다른 세션, 심지어 같은 사용자 / 연결 문자열에서 그들을 볼 수 없습니다. 수명에 대한 규칙은 로컬 임시 테이블은 저장 프로 시저에서 만들어 졌는지 여부에 따라 달라집니다

    지역 임시 테이블 (#으로 시작) 세션으로 제한됩니다; 다른 세션, 심지어 같은 사용자 / 연결 문자열에서 그들을 볼 수 없습니다. 수명에 대한 규칙은 로컬 임시 테이블은 저장 프로 시저에서 만들어 졌는지 여부에 따라 달라집니다

    전역 임시 테이블 (## 시작) 세션간에 공유됩니다. 그들은 때 삭제됩니다 :

    이 명령은 임시 테이블이 존재하는 볼 편리 할 수 ​​있습니다 :

    select TABLE_NAME from tempdb.information_schema.tables 
    

    그리고 이것은 확실 그들이 존재하지 않으면 임시 테이블을 드롭 편리합니다 :

    if object_id('tempdb..#SoTest') is not null drop table #SoTest
    

    자세한 내용은이 MSDN 문서를 참조하십시오.

  2. ==============================

    2.임시 테이블을 생성하는 프로 시저의 인스턴스에 액세스 할 수 있습니다

    임시 테이블을 생성하는 프로 시저의 인스턴스에 액세스 할 수 있습니다

    다음 스크립트

    Exec ('Select 1 as col Into #Temp Select * From #Temp')
    Exec ('Select 2 as col Into #Temp Select * From #Temp')
    

    보고

    Col
    1
    
    Col
    2
    

    아니

    Col
    1
    2
    

    또는 오류는 테이블이 이미 존재하기 때문이다.

    임시 테이블은 어떤 '아이'절차에 의해 액세스 초기 프로 시저 실행과 잘 될 것입니다.

  3. ==============================

    3.folowing 문서 힘 도움말 : "어떻게 데이터 공유에 저장 프로 시저 사이" http://www.sommarskog.se/share_data.html

    folowing 문서 힘 도움말 : "어떻게 데이터 공유에 저장 프로 시저 사이" http://www.sommarskog.se/share_data.html

  4. ==============================

    4.또한 테이블 변수를 사용하는 방법에 대해 생각할 수 있습니다. 그들은 매우 잘 정의 된 범위를 가지고 있고, 그들은 빠르게 자신의 임시 테이블에 비해 종종 있습니다. 테이블 변수와 유일한 문제는 일부 성능은 그 성격에도 불구하고 손실 될 수 있도록 그들이 색인을 생성 할 수 없다는 것입니다. 주제에 좀 더 많은 정보는 여기를 확인하십시오.

    또한 테이블 변수를 사용하는 방법에 대해 생각할 수 있습니다. 그들은 매우 잘 정의 된 범위를 가지고 있고, 그들은 빠르게 자신의 임시 테이블에 비해 종종 있습니다. 테이블 변수와 유일한 문제는 일부 성능은 그 성격에도 불구하고 손실 될 수 있도록 그들이 색인을 생성 할 수 없다는 것입니다. 주제에 좀 더 많은 정보는 여기를 확인하십시오.

  5. from https://stackoverflow.com/questions/892351/sql-server-2005-and-temporary-table-scope by cc-by-sa and MIT license