рд╣рдо рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╛рдж рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЗрд╡рд▓ рдЬрдЯрд┐рд▓ рдПрд╕рдХреНрдпреВрдПрд▓ рддрд░реНрдХ рдФрд░ рд╕реНрд╡реИрдЪреНрдЫрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИрдВред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рд╕рдм Microsoft SQL Server 2008 рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЬреЛ рд▓реЛрдЧ рд╡рд┐рд╖рдп рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдореИрдВ рдкреЛрд╕реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдВрдЪрд╡реАрдВ рд╡рд┐рдзрд┐ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред
рдЬрд┐рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░реЗрдВ:
create procedure Proc1 as begin select 1 p1, 'b' p2 end
1 рд╡рд┐рдзрд┐
рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХред
insert ... exec ...
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
insert ... exec ...
рдирд┐рд░реНрдорд╛рдг
if object_id(N'tempdb..
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:
- рдкреНрд░реЗрд╖рд┐рдд рдлрд╝реАрд▓реНрдб 2 рдмрд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ (рдпреЗ рдЖрдВрддрд░рд┐рдХ
select
, рдмрд╛рд╣рд░реА рддрд╛рд▓рд┐рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ insert
)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЦреЗрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдирдП рд╕рдорд╛рди рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИред (рдореИрдВ рдЗрд╕ рдорд╛рдирджрдВрдб рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЙрд▓ рдХреЗ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде, рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рд╣реЛ рдЬрд╛рддреА рд╣реИ) - рдЗрд╕рдХреА рдПрдХ рдЧрдВрднреАрд░ рд╕реАрдорд╛ рд╣реИ - рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
- рд╕рд░рд▓ рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕
insert
exec Proc1
insert
рдмрд┐рдирд╛
2 рд╡рд┐рдзрд┐
рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦрдХрд░ред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
create procedure Proc1 as begin insert
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рд╕рдореНрдорд┐рд▓рд┐рдд рд▓рд╛рдЗрди рд▓рдкреЗрдЯрддреЗ рд╣реИрдВред
if object_id(N'tempdb..
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:
- рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдлрд╝реАрд▓реНрдб 2 рдмрд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг
- рд╕рд░рд▓ рдЖрдЙрдЯрдкреБрдЯ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ
Proc1
рд╕реЗ рдкреНрд░рд╛рдкреНрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ Proc1
, рдпрд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ Proc1
рдЕрдВрджрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрдм рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓рд┐рдХрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ:
alter procedure Proc1 as begin declare @show bit if object_id(N'tempdb..#t1',N'U') is null begin set @show = 1 create table
рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХрд╛рд░реНрдп рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рд╕рддреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рд▓реЙрдХрд┐рдВрдЧ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
3 рд╡рд┐рдзрд┐
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХрд╛ рдкрд░рд┐рд╢реЛрдзрди рд╣реИред рд╕рдорд░реНрдерди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╕реНрдЯрдо рддрд╛рд▓рд┐рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдВред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
create type tt1 as table(p1 int, p2 varchar(max)) go create procedure Proc1 as begin insert
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:
- рдкреНрд░реЗрд╖рд┐рдд рдлрд╝реАрд▓реНрдб 2 рдмрд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
- рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдЙрддреНрдкрд╛рджрди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
- рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдФрд░ рдкреНрд░рддрд┐рдмрдВрдз рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреА рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рд╣реИрдВ, рдЬреИрд╕реЗ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд┐рд░реНрдорд╛рдг
select ... into
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ
4 рд╡рд┐рдзрд┐
рддреАрд╕рд░реА рд╡рд┐рдзрд┐ рдХреА рдЬрдЯрд┐рд▓рддрд╛, рдЖрдкрдХреЛ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ Microsoft SQL Server 2005 рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
create procedure Proc1 as begin insert
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдорддреМрд░ рдкрд░ рдбреЗрд▓реНрдореА рдЕрд╕реНрдерд╛рдпреА рдХреЙрд▓рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рддрд╛рд▓рд┐рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдкрд╣рд▓реЗ рдХреЙрд▓рдо (рдпрд╣рд╛рдВ рдкреА 1 рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рд╣реИред
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:
- рдкреНрд░реЗрд╖рд┐рдд рдлрд╝реАрд▓реНрдб 2 рдмрд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
- рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реАрдзреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рдгрд╛рдо рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
- рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдерд╛ рдХрд┐ рдХрднреА-рдХрднреА, рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ,
alter table #t1
рдирд┐рд░реНрдорд╛рдг рдкрд░ рддрд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ Proc1
(рдирд╣реАрдВ Proc1_AlterTable
!) рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреА рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ - рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреА :)
5 рд╡рд┐рдзрд┐
рдпрд╣ рд╡рд┐рдзрд┐ рдкреВрд░реНрд╡-рдирд┐рд░реНрдорд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЧрддрд┐рд╢реАрд▓ SQL рдХреНрд╡реЗрд░реА рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
1. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
if object_id('tempdb..
2. рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ рдЬреЛ
#Output
рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
into #Output
,
into #Output5
,
into #OutputMySelect
)ред рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реЗрдЯ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИ, рддреЛ рдХреЛрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
3. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд▓рд╛рдЗрди рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
exec util.InclusionEnd
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
create procedure Proc1 as begin if object_id('tempdb..#ttInclusion', 'U') is null create table
рдкреНрд░рдХреНрд╖реЗрдкрдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
if object_id('tempdb..
рдЪреВрдВрдХрд┐ рдЙрддреНрдкрдиреНрди SQL рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЫреЛрдЯреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдпрджрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдб рд╣реИ, рддреЛ рдЖрдк рдпрд╛ рддреЛ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдбрд╛рдпрдиреЗрдорд┐рдХ рднрд╛рдЧ рд╕реЗ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЙрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдбреЗрдЯрд╛ рдХреЛ рдирдП рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдФрд░ "рдЕрддрд┐рд░рд┐рдХреНрдд" рдирдХрд▓ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреВрд░реНрд╡-рд╕рдореВрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рднреА рд▓реМрдЯрд╛рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред )ред
рдЙрдкрдпреЛрдЧред
util.InclusionRun
рдлрд╝рдВрдХреНрд╢рди рдХреЛ 3 рдкреИрд░рд╛рдореАрдЯрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:
@sql
рдПрд╕рдХреНрдпреВрдПрд▓ - рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП@notShowOutput
- рдпрджрд┐ = 1 рд╣реИ, рддреЛ #Output
рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ@replaceableTableName
- (рдбрд┐рдлрд╝реЙрд▓реНрдЯ = '#Output'
) рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд #Output*
рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП @sql
рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдирд╛рдо рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ рд╕реЗрдЯ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк #InclusionOutput
рдирд┐рд░реНрджрд┐рд╖реНрдЯ #InclusionOutput
рдФрд░ рджреЛ рддрд╛рд▓рд┐рдХрд╛рдПрдБ #Output55
рдФрд░ #Output0A
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмрдирд╛рдИ #Output0A
, рддреЛ @sql
рдЖрдк #Output55
рдХреЛ #InclusionOutput1
, рдФрд░ #Output0A
рдХреЛ #InclusionOutput2
рд░реВрдк рдореЗрдВ @sql
рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рдо рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЪрд▓ рд░рд╣реЗ
util.InclusionRun
рдмрд┐рдирд╛,
Proc1
рдХреЛ рдЪрд▓рд╛рдирд╛ред
util.InclusionRun
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрди рд╕рднреА рдбреЗрдЯрд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХреА рдорд╛рддреНрд░рд╛:
- рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ
return
рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рдЪрдпрдирдХрд░реНрддрд╛ рдЬреЛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдкрд░рд┐рдгрд╛рдо рдЙрди
util.InclusionEnd
рд╕реЗ рдкрд╣рд▓реЗ рднреА рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдереЗ (рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рд╢рд╛рдорд┐рд▓ util.InclusionEnd
)
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖:
- рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдлрд╝реАрд▓реНрдб рдПрдХ рдмрд╛рд░ рд╕реВрдЪреАрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
- рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реАрдзреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
- рдЙрдкрдпреЛрдЧ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
- рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЕрдзрд┐рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдЙрдкреЗрдХреНрд╖рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)
- рд╢рд╛рдпрдж рдпрд╣ рдЙрди рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рд╕рдордЭ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ: рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛ рдирд┐рд╖реНрдкрд╛рджрди-рдХреЙрд▓ рдФрд░ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕рднреА
#Output
рдЯреЗрдмрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ
рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдардХреЛрдб:
if object_id('dbo.TestInclusion') is not null drop procedure dbo.TestInclusion go create procedure dbo.TestInclusion @i int as begin if object_id('tempdb..#ttInclusion', 'U') is null create table
рдкрд░рд┐рдгрд╛рдо:
----------------------------------------------------------------------------------------------------------------------------------------------------------- 1: TestInclusion. myI : 2 3. 1 : " TestInclusion" myI ----------- 2 3 alt ----------------------- TestInclusion ------------------------------------------------------------------------------------------------------ 2: TestInclusion. testSum : 5 testSum ----------- 5
рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда if not exists(select top 1 null from sys.schemas where name = 'util') begin exec ('create schema util') end go alter procedure util.InclusionBegin as begin set nocount on set ansi_warnings off declare @lvl int if object_id('tempdb..#ttInclusionParameters', 'U') is not null begin select @lvl = max(lvl) from
рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ
рдЖрдк (
OUTPUT
) рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдХрд░реНрд╕рд░ рдпрд╛ рдПрдХреНрд╕рдПрдордПрд▓ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░
рдПрдХ рд▓реЗрдЦ рд╣реИ ред
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдпрджрд┐ рдХрд░реНрд╕рд░ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд▓реЗрдХрд┐рди XML рдЖрд╢рд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдпрд╣рд╛рдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВред
рдпрд╣ рд╕реБрдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ :)
UPD 03/31/2014: рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдкреЛрд╕реНрдЯ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛