@table_variable 또는 #temp_table


11

129 열이있는 큰 사용자 정의 테이블 유형 변수가 있습니다. 이 테이블 변수에 한 번에 약 2000-3000 개의 레코드를 저장하고 다양한 저장 프로 시저 및 함수에 전달하여 추가 데이터를 가져오고 수정합니다. 이러한 추가 데이터 및 새 수정 사항은 동일한 유형의 새 테이블 변수에 저장되고 OUTPUT매개 변수 를 통해 소스 스토어드 프로 시저로 리턴됩니다 . (테이블 유형 매개 변수는로만 전달 될 수 있기 때문 READONLY입니다.)

이것은 내 의사 코드입니다.

  SP1
  @tmp tableType
  {
        INSERT @tmp EXEC
        SP2 (@tmp)

        INSERT @tmp EXEC
        SP3 (@tmp)
  }

나는 사용해야 @table_variable또는 #temp_table?


답변:


12

살펴 봐야 할 두 개의 블로그가 있습니다. 첫 번째 ( here )는 테이블 변수와 임시 테이블을 비교 한 것입니다. 2008 년이며 SQL Server 2008 R2와 관련이 있습니다.

두 번째 블로그 항목 ( here )은 테이블 변수에 대한 몇 가지 오해 (실종 된 개념)를 처리합니다. 테이블 변수 인덱싱을 포함합니다.

이 두 블로그 항목 인 기사는 Gail Shaw가 작성했습니다.

찾고있는 항목은 테이블 변수가 저장 프로 시저 사이에 전달되지 않을 수 있지만 임시 테이블은 저장 프로 시저 사이에 전달 될 수 있다고 생각합니다. 저장 프로 시저간에 가장 가까운 테이블 변수는 사용자 정의 테이블 형식입니다.

테이블 변수를 TVP로 저장 프로 시저에 전달하려면 READ-ONLY 매개 변수로 정의해야합니다. 이는 수정 된 사본을 리턴하려는 경우 테이블 변수의 사본이 여러 개 있음을 의미합니다.

전달 된 구조를 업데이트 된 값으로 반환하려는 경우 임시 테이블을 사용하면 저장 프로 시저 사이를 전달하는 것이 더 좋습니다.


5

둘 다 시도하는 것보다 낫지는 않지만 수백 개의 레코드에 들어가면 #tempTables가 더 잘 수행됩니다.


3
또한 임시 테이블에는 인덱스가 있고 통계가있을 수 있으며 테이블 변수에는 PK 만있을 수 있습니다. 자세한 내용은 여기에 있습니다 .
Marian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.