본문 바로가기

프로그래밍/MSSQL

[MSSQL] 사용자 정의 데이터 형식을 이용한 프로시저 집합기반 처리 (프로시저 테이블 파라미터 TVP)

반응형

 

 

 

 

 

 

사용자 정의 데이터 형식을 이용하여, 프로시저 집합 기반 처리를 해보자

 

 

문제 상황

 

학생의 이름과 나이 정보를 저장하는 테이블에 프로시저를 이용하여 값을 넣으려고 한다.

 

CREATE PROCEDURE usp_student_ins
	@s_name varchar(100),
	@s_age int
AS
BEGIN
	SET NOCOUNT ON;

	INSERT INTO table_ggmouse (name, age)
	SELECT @s_name, @s_age
END
GO

 

 

아래와 같이 프로시저를 호출하여 테이블에 값을 넣어줬다.

 

EXEC usp_student_ins @s_name = 'minzy', @s_age = 10
EXEC usp_student_ins @s_name = 'inyoung', @s_age = 8
EXEC usp_student_ins @s_name = 'woohee', @s_age = 11
EXEC usp_student_ins @s_name = 'dan', @s_age = 9
GO
SELECT * FROM table_ggmouse

 

 

결과 데이터

 

 

 

데이터는 정상적으로 잘 들어갔다.

 

여기서 우리는 4명의 학생 데이터만을 넣어줬다. 하지만, 1000명의 학생의 데이터를 넣어야 한다면?

 

프로시저를 1000번 호출하게 될 것이다.

 

 

위에서 작성된 프로시저는 단순히 INSERT 구문 하나만 들어있는 프로시저이기 때문에 큰 이슈가 없을지 몰라도

 

INSERT구문 외에 추가 쿼리문들이 포함되어 있을 경우 불필요한 작업이 계속해서 발생하게 될 수 있는 것이다.

 

 

자 이쯤에서 본격적으로 사용자 정의 데이터 형식을 이용하여 프로시저 집합 기반 처리를 해보자

 

 

 

 

 

해결방법

 

 

1. 학생 정보 데이터 형식 생성

 

CREATE TYPE dbo.studentType as TABLE
(
	name VARCHAR(100),
	age INT
)

 

 

2. 학생 정보 입력 프로시저 생성

 

CREATE PROCEDURE usp_studentType_ins
	@TypeStudent dbo.studentType READONLY
AS
BEGIN
SET NOCOUNT ON;

	INSERT INTO table_ggmouse (name, age)
	SELECT name, age
	FROM @TypeStudent
END
GO

 

 

3. 프로시저 호출

 

-- 학생 정보 데이터 형식 변수 선언
DECLARE @studentInfo AS studentType

-- 변수에 데이터 입력
INSERT INTO @studentInfo
SELECT 'minzy', 10
UNION ALL
SELECT 'inyoung', 8
UNION ALL
SELECT 'woohee',11
UNION ALL
SELECT 'dan', 9

-- 프로시저 실행
EXEC usp_studentType_ins @studentInfo

 

 

4. 결과 조회

 

SELECT * FROM table_ggmouse

 

 

결과 데이터

 

 

 

 

한 번의 프로시저 실행으로 4명의 학생 데이터를 넣어줬다.

 

마찬가지로 1000명의 학생 데이터 역시 한 번의 프로시저 실행으로 넣어줄 수 있다.

 

자 이렇게 사용자 데이터 형식을 이용한 프로시저 집합 기반 처리를 살펴봤다.

 

반응형