일단 테스트를 위한 환경을 만들자. 앞선 내용과 같다.
use tempdb
go
--drop table source_table
create table source_table (
id varchar(10)
, pw varchar(10)
);
--drop table target_table
create table target_table (
id varchar(10)
, pw varchar(10)
);
insert source_table values
('dwa', '1234')
, ('yasi', '4567')
, ('lk', 'lk123') --new syntax, T-SQL Row Constructors
go
사용자 정의 타입을 만들고, 저장 프로시저에서 Row Set을 매개변수로 받을 수 있다. 예를 들어 예전에는 입력 매개변수로 '1,2,3,4'와 같은 구분자를 가진 문자열을 파싱하여 테이블 형태로 만들었으나 SQL Server 2008에서는 이 방식을 사용하면 된다.
create type id as table --new syntax, Table Value Type
(
id varchar(10) null
);
go
create proc table_value_param_test
@table id readonly
as
begin
declare @i int = 10; --new syntax
select * from source_table
where id in (select id from @table)
end
go
declare @param as id;
insert @param(id) values('dwa'), ('yasi');
exec table_value_param_test @param;
/*
id pw
---------- ----------
dwa 1234
yasi 4567
*/