반응형
사용자 정의 데이터 형식을 이용하여, 프로시저 집합 기반 처리를 해보자
문제 상황
학생의 이름과 나이 정보를 저장하는 테이블에 프로시저를 이용하여 값을 넣으려고 한다.
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명의 학생 데이터 역시 한 번의 프로시저 실행으로 넣어줄 수 있다.
자 이렇게 사용자 데이터 형식을 이용한 프로시저 집합 기반 처리를 살펴봤다.
반응형
'프로그래밍 > MSSQL' 카테고리의 다른 글
[MSSQL] NOT MATCHED BY SOURCE ('DELETE' 유형의 동작은 MERGE 문의 'WHEN NOT MATCHED' 절에 사용할 수 없습니다.) (0) | 2020.01.07 |
---|---|
[MSSQL] BULK INSERT (CSV/TXT 파일 결과 저장 & 파일 INSERT) (1) | 2019.12.18 |
[MSSQL] 트랜잭션 로그 보기 (0) | 2019.12.16 |
[MSSQL] 로그인 등록/수정/삭제 (오류 암호의 유효성을 검사하지 못했습니다.) (0) | 2019.12.10 |
[MSSQL] SPLIT 문자열 구분자로 자르기 (0) | 2019.11.29 |