Linux рдорд╛ Powershell рдмрд╛рдЯ MS SQL рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ

рдпреЛ рд▓реЗрдЦ рд╡рд┐рд╢реБрджреНрдз рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЫ рд░ рдореЗрд░реЛ рджреБрдЦрдж рдХрдерд╛рдорд╛ рд╕рдорд░реНрдкрд┐рдд рдЫ

рд▓рд╛рдЧрд┐ рддрдпрд╛рд░реА рдЧрд░реНрджреИ рд╢реВрдиреНрдп рдЯрдЪ PROD RDS (MS SQL), рдЬрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣рд╛рдореНрд░рд╛ рд╕рдмреИ рдХрд╛рди рдЧреБрдЮреНрдЬрд┐рд░рд╣реЗрдХрд╛ рдерд┐рдП, рдореИрд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рдирдХреЛ рдПрдХ рдкреНрд░рд╕реНрддреБрддреАрдХрд░рдг (POC - рдкреНрд░реБрдл рдЕрдл рдХрдиреНрд╕реЗрдкреНрдЯ) рдмрдирд╛рдПрдХреЛ рдерд┐рдПрдБ: рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрдХреЛ рд╕реЗрдЯред рдкреНрд░рд╕реНрддреБрддрд┐ рдкрдЫрд┐, рдЬрдм рддреВрдлрд╛рдиреА, рд▓рд╛рдореЛ рддрд╛рд▓реА рдорд░реЗ, рдирд┐рд░рдиреНрддрд░ рддрд╛рд▓реАрдорд╛ рдкрд░рд┐рдгрдд рднрдпреЛ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдорд▓рд╛рдИ рднрдиреЗ - рдпреЛ рд╕рдмреИ рд░рд╛рдореНрд░реЛ рдЫ, рддрд░ рдХреЗрд╡рд▓ рд╡реИрдЪрд╛рд░рд┐рдХ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛, рд╣рд╛рдореНрд░рд╛ рд╕рдмреИ рдЬреЗрдирдХрд┐рдиреНрд╕ рджрд╛рд╕рд╣рд░реВ рд▓рд┐рдирдХреНрд╕рдорд╛ рдХрд╛рдо рдЧрд░реНрдЫрдиреН!

рдХреЗ рдпреЛ рд╕рдореНрднрд╡ рдЫ? рд╡рд┐рдиреНрдбреЛрдЬ рдореБрдирд┐рдмрд╛рдЯ рдпрд╕реНрддреЛ рдиреНрдпрд╛рдиреЛ, рдмрддреНрддреА DBA рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рд▓рд┐рдирдХреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рдкрд╛рд╡рд░рд╢реЗрд▓рдХреЛ рдзреЗрд░реИ рддрд╛рддреЛрдорд╛ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реН? рдпреЛ рдирд┐рд░реНрджрдпреА рд╣реЛрдЗрди?

Linux рдорд╛ Powershell рдмрд╛рдЯ MS SQL рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ
рдореИрд▓реЗ рдкреНрд░рд╡рд┐рдзрд┐рдХреЛ рдпреЛ рдЕрдиреМрдареЛ рд╕рдВрдпреЛрдЬрдирдорд╛ рдЖрдлреВрд▓рд╛рдИ рдбреБрдмрд╛рдЙрдиреБ рдкрд░реНрдпреЛред рдЕрд╡рд╢реНрдп рдкрдирд┐, рдореЗрд░рд╛ рд╕рдмреИ рейреж+ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВрд▓реЗ рдХрд╛рдо рдЧрд░реНрди рдЫреЛрдбреЗред рдореЗрд░реЛ рдЕрдЪрдореНрдордХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдПрдХ рдХрд╛рд░реНрдп рджрд┐рдирдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рдареАрдХ рдЧрд░реНрди рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдЧрд░реЗрдВред рдо рддрд╛рддреЛ рдЦреЛрдЬреАрдорд╛ рд▓реЗрдЦреНрджреИрдЫреБред рддреНрдпрд╕реЛрднрдП, рд╡рд┐рдиреНрдбреЛрдЬрдмрд╛рдЯ рд▓рд┐рдирдХреНрд╕рдорд╛ рдкрд╛рд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрджрд╛ рддрдкрд╛рдИрд▓реЗ рдХреБрди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рд╛рдордирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?

sqlcmd рдмрдирд╛рдо Invoke-SqlCmd

рдорд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВ рдмреАрдЪрдХреЛ рдореБрдЦреНрдп рднрд┐рдиреНрдирддрд╛рдХреЛ рд╕рдореНрдЭрдирд╛ рдЧрд░реМрдВред рд░рд╛рдореНрд░реЛ рдкреБрд░рд╛рдиреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ sqlcmd рдпреЛ рдкрдирд┐ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕рдВрдЧ, рд▓рд┐рдирдХреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рдХрд╛рдо рдЧрд░реНрджрдЫред рд╣рд╛рдореА -Q рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдХреНрд╡реЗрд░реА рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓ -i рдХреЛ рд░реВрдкрдорд╛ рд░ рдЖрдЙрдЯрдкреБрдЯ -oред рддрд░ рдлрд╛рдЗрд▓ рдирд╛рдорд╣рд░реВ, рдЕрд╡рд╢реНрдп рдкрдирд┐, рдХреЗрд╕-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдмрдирд╛рдЗрдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ -i рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдлрд╛рдЗрд▓рдорд╛ рдЕрдиреНрддреНрдпрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН:

GO
EXIT

рдпрджрд┐ рдЕрдиреНрддреНрдпрдорд╛ EXIT рдЫреИрди рднрдиреЗ, sqlcmd рдЗрдирдкреБрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрди рдЕрдЧрд╛рдбрд┐ рдмрдвреНрдиреЗрдЫ, рд░ рдпрджрд┐ рдкрд╣рд┐рд▓реЗ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН рдЧрд░реНрджреИрди GO, рддреНрдпрд╕рдкрдЫрд┐ рдЕрдиреНрддрд┐рдо рдЖрджреЗрд╢ рдХрд╛рдо рдЧрд░реНрджреИрдиред рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓рд▓реЗ рд╕рдмреИ рдЖрдЙрдЯрдкреБрдЯ, рдЪрдпрди, рд╕рдиреНрджреЗрд╢, рдкреНрд░рд┐рдиреНрдЯ, рдЖрджрд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред

Invoke-SqlCmd рд▓реЗ DataSet, DataTables рд╡рд╛ DataRows рдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЪрдпрдирдХреЛ рдирддрд┐рдЬрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ sqlcmd, рдпрд╕рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд╛рд░реНрд╕ рдЧрд░реЗрдкрдЫрд┐, рдХреЗрд╣рд┐ рдЬрдЯрд┐рд▓ рдирд┐рдХрд╛рд▓реНрди рд▓рдЧрднрдЧ рдЕрд╕рдореНрднрд╡ рдЫ: рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рдЫ Invoke-SqlCmdред рддрд░ рдпрд╕ рдЯреЛрд▓реАрдХреЛ рдкрдирд┐ рдЖрдлреНрдиреИ рдордЬрд╛рдХрд╣рд░реВ рдЫрдиреН:

  • рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЙрд╕рд▓рд╛рдИ рдорд╛рд░реНрдлрдд рдлрд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ -рдЗрдирдкреБрдЯрдлрд╛рдЗрд▓, рддреНрдпрд╕рдкрдЫрд┐ рдмрд╛рд╣рд┐рд░ рдирд┐рд╕реНрдХрдиреБрд╣реЛрд╕реН рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рдпрд╕рдмрд╛рд╣реЗрдХ, рдпрд╕рд▓реЗ рд╕рд┐рдиреНрдЯреНрдпрд╛рдХреНрд╕ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ
  • -рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рд╣реЛрдЗрди, рдЖрджреЗрд╢рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд╕реНрддреБрдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рдгрд╛рдо рдлрд░реНрдХрд╛рдЙрдБрдЫ
  • рддреНрдпрд╣рд╛рдБ рд╕рд░реНрднрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рджреБрдИ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕рд╣рд░реВ рдЫрдиреН: -рд╕рд░реНрднрд░рдЗрдиреНрд╕реНрдЯреЗрдиреНрд╕ -рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо -рдкрд╛рд╕рд╡рд░реНрдб -рдбреЗрдЯрд╛рдмреЗрд╕ рд░ рдорд╛рд░реНрдлрдд -ConnectionStringред рдЕрдиреМрдареЛ рд░реВрдкрдорд╛, рдкрд╣рд┐рд▓реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдпреЛ 1433 рднрдиреНрджрд╛ рдЕрдиреНрдп рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫреИрдиред
  • рдкрд╛рда рдЖрдЙрдЯрдкреБрдЯ, рдЯрд╛рдЗрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН PRINT, рдЬреБрди рдХреЗрд╡рд▓ "рдкрдХреНрд░рд┐рдПрдХреЛ" рдЫ sqlcmdрдХреЛ рд▓рд╛рдЧреА Invoke-SqlCmd рд╕рдорд╕реНрдпрд╛ рдЫ
  • рд░ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг: рд╕рдореНрднрд╡рддрдГ рддрдкрд╛рдИрдХреЛ рд▓рд┐рдирдХреНрд╕рдорд╛ рдпреЛ cmdlet рдЫреИрди!

рд░ рдпреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реЛред рдорд╛рд░реНрдЪрдорд╛ рдорд╛рддреНрд░ рдпреЛ cmdlet рдЧреИрд░-рд╡рд┐рдиреНрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рднрдпреЛ, рд░ рдЕрдиреНрддрдорд╛ рд╣рд╛рдореА рдЕрдЧрд╛рдбрд┐ рдмрдвреНрди рд╕рдХреНрдЫреМрдВ!

рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди

sqlcmd рдорд╛ -v рдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЫ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА рдпреЛ рдЬрд╕реНрддреИ:

# $conn ╤Б╨╛╨┤╨╡╤А╨╢╨╕╤В ╨╜╨░╤З╨░╨╗╨╛ ╨║╨╛╨╝╨░╨╜╨┤╤Л sqlcmd
$cmd = $conn + " -i D:appsSlaveJobsKillSpid.sql -o killspid.res 
  -v spid =`"" + $spid + "`" -v age =`"" + $age + "`""
Invoke-Expression $cmd

SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рд╣рд╛рдореА рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ:

set @spid=$(spid)
set @age=$(age)

рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдпрд╣рд╛рдБ рдЫред * рдирд┐рдХреНрд╕ рдорд╛ рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрди... рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ -v рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдпреЛред U Invoke-SqlCmd рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдпреЛ - рдЪрд░ред рдпрджреНрдпрдкрд┐ рдЪрд░рд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдирд╣рд░реВ рдЖрдлреИрдВрд▓реЗ рдХрд╛рдо рдЧрд░реНрджрдЫ - рддрдкрд╛рдЗрдБ рд╢реЗрд▓рдмрд╛рдЯ рдХреБрдиреИ рдкрдирд┐ рдЪрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЬреЗ рд╣реЛрд╕реН, рдо рднреНрдпрд╛рд░реАрдПрдмрд▓рд╣рд░реВрдмрд╛рдЯ рдЪрд┐рддреНрдд рджреБрдЦрд╛рдПрдХреЛ рдерд┐рдПрдБ рд░ рддрд┐рдиреАрд╣рд░реВрдорд╛ рднрд░ рдкрд░реНрди рдирджрд┐рдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ, рд░ SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рдЫреЛрдЯреЛ рднрдПрдХрд╛рд▓реЗ рдХрдареЛрд░ рд░ рдЖрджрд┐рдо рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реЗрдВ:

# prepend the parameters  
"declare @age int, @spid int" | Add-Content "q.sql"
"set @spid=" + $spid | Add-Content "q.sql"
"set @age=" + $age | Add-Content "q.sql"

foreach ($line in Get-Content "Sqlserver/Automation/KillSpid.sql") { 
  $line | Add-Content "q.sql" 
  }
$cmd = "/opt/mssql-tools/bin/" + $conn + " -i q.sql -o res.log"

рдпреЛ, рддрдкрд╛рдИрдВрд▓реЗ рдмреБрдЭреНрдиреБрднрдПрдХреЛ рд░реВрдкрдорд╛, рдпреБрдирд┐рдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдгрдмрд╛рдЯ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрд░реАрдХреНрд╖рдг рд╣реЛред

рдлрд╛рдЗрд▓рд╣рд░реВ рдЕрдкрд▓реЛрдб рдЧрд░реНрджреИ

рд╡рд┐рдиреНрдбреЛрдЬ рд╕рдВрд╕реНрдХрд░рдгрдорд╛, рдХреБрдиреИ рдкрдирд┐ рдЕрдкрд░реЗрд╢рди рдЕрдбрд┐рдЯрдХреЛ рд╕рд╛рдердорд╛ рдерд┐рдпреЛ: рд╣рд╛рдореАрд▓реЗ sqlcmd рдЪрд▓рд╛рдпреМрдВ, рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓рдорд╛ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рджреБрд░реБрдкрдпреЛрдЧ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНтАНрдпреМрдВ, рдпреЛ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЕрдбрд┐рдЯ рдкреНрд▓реЗрдЯрдорд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдпреМрдВред рд╕реМрднрд╛рдЧреНрдпрд╡рд╢, SQL рд╕рд░реНрднрд░рд▓реЗ рдЬреЗрдирдХрд┐рдиреНрд╕рдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рд╕рд░реНрднрд░рдорд╛ рдХрд╛рдо рдЧрд░реНрдпреЛ, рдпреЛ рдпреЛ рдЬрд╕реНрддреИ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:

CREATE procedure AuditUpload
  @id int, @filename varchar(256)
as
  set nocount on
  declare @sql varchar(max)

  CREATE TABLE #multi (filer NVARCHAR(MAX))
  set @sql='BULK INSERT #multi FROM '''+@filename
    +''' WITH (ROWTERMINATOR = '' '',CODEPAGE = ''ACP'')'
  exec (@sql)
  select @sql=filer from #multi
  update JenkinsAudit set multiliner=@sql where ID=@id
  return

рдпрд╕рд░реА, рд╣рд╛рдореА BCP рдлрд╛рдЗрд▓ рдкреВрд░реИ рдирд┐рд▓реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдЕрдбрд┐рдЯ рддрд╛рд▓рд┐рдХрд╛рдХреЛ nvarchar(max) рдлрд┐рд▓реНрдбрдорд╛ рд╣рд╛рд▓реНрдЫреМрдВред рдирд┐рд╕реНрд╕рдиреНрджреЗрд╣, рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдЕрд▓рдЧ рднрдпреЛ, рдХрд┐рдирднрдиреЗ SQL рд╕рд░реНрднрд░рдХреЛ рд╕рдЯреНрдЯрд╛ рдореИрд▓реЗ RDS рдкрд╛рдПрдБ, рд░ BULK INSERT рд▓реЗ UNC рдорд╛рд░реНрдлрдд рдХреБрдиреИ рдкрдирд┐ рдлрд╛рдЗрд▓рдорд╛ рд╡рд┐рд╢реЗрд╖ рд▓рдХ рд▓рд┐рдиреЗ рдкреНрд░рдпрд╛рд╕рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдХрд╛рдо рдЧрд░реНрджреИрди, рд░ RDS рдХреЛ рд╕рд╛рде рдпреЛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдмрд░реНрдмрд╛рдж рд╣реБрдиреНрдЫред рдПрдХрджрдо рд╢реБрд░реБрд╡рд╛рддред рддреНрдпрд╕реИрд▓реЗ рдореИрд▓реЗ рдЕрдбрд┐рдЯ рд▓рд╛рдЗрди рд▓рд╛рдИ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджреИ рдкреНрд░рдгрд╛рд▓реА рдбрд┐рдЬрд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗрдВ:

CREATE TABLE AuditOut (
  ID int NULL,
  TextLine nvarchar(max) NULL,
  n int IDENTITY(1,1) PRIMARY KEY
  )

рд░ рдпрд╕ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдпрд╕рд░реА рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН:

function WriteAudit([string]$Filename, [string]$ConnStr, 
     [string]$Tabname, [string]$Jobname)
{
  # get $lastid of the last execution  -- ╨┐╤А╨╛╤Б╨║╨╕╨┐╨░╨╜╨╛ ╨┤╨╗╤П ╤Б╤В╨░╤В╤М╨╕
	
  #create grid and populate it with data from file
  $audit =  Get-Content $Filename
  $DT = new-object Data.DataTable   

  $COL1 =  new-object Data.DataColumn; 
  $COL1.ColumnName = "ID"; 
  $COL1.DataType =  [System.Type]::GetType("System.Int32") 

  $COL2 =  new-object Data.DataColumn; 
  $COL2.ColumnName = "TextLine"; 
  $COL2.DataType =  [System.Type]::GetType("System.String") 
  
  $DT.Columns.Add($COL1) 
  $DT.Columns.Add($COL2) 
  foreach ($line in $audit) 
    { 
    $DR = $dt.NewRow()   
    $DR.Item("ID") = $lastid
    $DR.Item("TextLine") = $line
    $DT.Rows.Add($DR)   
    } 

  # write it to table
  $conn=new-object System.Data.SqlClient.SQLConnection 
  $conn.ConnectionString = $ConnStr
  $conn.Open() 
  $bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $ConnStr
  $bulkCopy.DestinationTableName = $Tabname 
  $bulkCopy.BatchSize = 50000
  $bulkCopy.BulkCopyTimeout = 0
  $bulkCopy.WriteToServer($DT) 
  $conn.Close() 
  }  

рд╕рд╛рдордЧреНрд░реА рдЪрдпрди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдИрдбреА рдЕрдиреБрд╕рд╛рд░ рдЪрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдХреНрд░рдо n (рдкрд╣рд┐рдЪрд╛рди) рдЫрдиреЛрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЕрд░реНрдХреЛ рд▓реЗрдЦрдорд╛ рдо рдпреЛ рд╕рдмреИ рдЬреЗрдирдХрд┐рдиреНрд╕рд╕рдБрдЧ рдХрд╕рд░реА рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рдЬрд╛рдиреЗрдЫреБред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди