#title The Hidden Costs of INSERT EXEC
[[TableOfContents]]

==== 무작정 해보자 ====
{{{#!
create table #temp(id varchar(150))

truncate table #temp 
exec('
	insert #temp 
	select top 10000 convert(varchar(150), newid())
	from sys.objects a, sys.objects b
	')
테이블 '#temp'. 검색 수 0, 논리적 읽기 수 10060, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.


truncate table #temp 
insert #temp 
exec('
	select top 10000 convert(varchar(150), newid())
	from sys.objects a, sys.objects b
	')

테이블 '#temp'. 검색 수 0, 논리적 읽기 수 10060, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Worktable'. 검색 수 1, 논리적 읽기 수 20410, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.


truncate table #temp 

declare @sql nvarchar(500)
set @sql = N'
	select top 10000 convert(varchar(150), newid())
	from sys.objects a, sys.objects b
	'
insert #temp 
exec sp_executesql @sql

테이블 '#temp'. 검색 수 0, 논리적 읽기 수 10060, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
테이블 'Worktable'. 검색 수 1, 논리적 읽기 수 20410, 물리적 읽기 수 0, 미리 읽기 수 0, LOB 논리적 읽기 수 0, LOB 물리적 읽기 수 0, LOB 미리 읽기 수 0.
}}}

==== 결론 ====
 * 웬만하면 INSERT ~ EXEC(SELECT ~ )를 하지 말자.
 * 웬만하면 EXEC(INSERT ~ SELECT ~)를 하자.
 * 웬만하면 다른 솔루션을 이용하자. 로그 기록을 최소화하는 걸루다가..
==== 참고자료 ====
 * http://sqlblog.com/blogs/adam_machanic/archive/2009/06/25/the-hidden-costs-of-insert-exec.aspx