MSSQL - 테이블 반환 매개 변수 (테이블 변수)

 

테이블 반환 매개 변수

  • 사용자 정의 테이블 형식을 사용하여 선언
  • 임시 테이블이나 많은 매개 변수 없이 여러 행의 데이터를 반환
  • 집합 기반 작업에 유용

설명이 다소 어려울 수 있으나 쉽게 풀어보자면

한 번 쓰고 사라지는 변수인데 가상의 테이블로 그룹화하여 여러개의 데이터를 묶어서 관리 할 수 있다.

물론, 일회성 변수이므로 사용 후 따로 DROP 키워드를 사용하여 삭제해야 하는 번거로움을 줄일 수 있다. 

(= 자원 관리의 효율이 올라간다.)


테이블 변수의 장점

(사용 이해를 돕기 위해 간단히 대표적인 장점만 설명)

  • 입력 데이터의 복사본을 만들지 않음
  • 서버의 왕복을 줄임 (성능 향상)
  • 즉, 쿼리 비용을 줄이는 것을 목표로 최적화에 유용하게 사용
    • 서버 DB에서 SQL문 실행시 매번 서버에서 데이터를 가져와야 함
    • 이는 서버에 과부하를 주며 성능이 저하 될 수 있음
    • 테이블 변수를 사용하여 데이터들을 테이블 변수에 저장하여 데이터를 처리
    • 필요한 데이터를 테이블 변수에서 가져오므로 서버 DB의 부하를 줄임

구문

선언

  • 변수 선언과 비슷
  • "테이블" 변수이기 때문에 변수명 뒤에 테이블의 속성을 정의
-- 테이블 변수 선언
DECLARE @tableVar TABLE (
    -- ColumnName DataType ...
)

값 입력, 조회

  • 기존의 SELECT, INSERT문과 비슷
  • 입력된 값은 일회성으로 사용
-- 테이블 변수의 값 입력
-- 값은 데이터베이스에 영구히 저장되지 않음, 일회성 데이터
INSERT INTO @tableVar (Column) values (Value)

-- 테이블 변수의 값 조회
SELECT * FROM @tableVar

사용 예시

기본 테이블 정보

  • 테이블 정보 : testTable 

 

  • 테이블 정보 : testPoketTable


테이블 변수 사용 코드 작성

-- 사용 예시
DECLARE @tTrainer TABLE (
    id INT NOT NULL,
    name nvarchar(10) NOT NULL,
    pokemon nvarchar(10)
)

-- 테이블 변수에 값 저장
-- 컬럼 : id, name, poketName
INSERT INTO @tTrainer
    SELECT testTable.id, testTable.name, testPoketTable.poketName
    FROM testTable
    LEFT JOIN testPoketTable ON testTable.id = testPoketTable.id
    
-- 테이블 변수의 값 조회
-- 조회되는 순간 테이블 변수의 값은 사라짐, 이후 조회 X
SELECT * FROM @tTrainer

실행 결과

 

  • 이후 테이블 변수의 값 재확인
SELECT * FROM @tTrainer