Linux рд╡рд░ Powershell рд╡рд░реВрди MS SQL рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ

рд╣рд╛ рд▓реЗрдЦ рдкреВрд░реНрдгрдкрдгреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рдЭреНрдпрд╛ рджреБрдГрдЦрд╛рдЪреНрдпрд╛ рдХрдереЗрд▓рд╛ рд╕рдорд░реНрдкрд┐рдд рдЖрд╣реЗ

рд╕рд╛рдареА рддрдпрд╛рд░ рд╣реЛрдд рдЖрд╣реЗ рдЭрд┐рд░реЛ рдЯрдЪ PROD рдЖрд░рдбреАрдПрд╕ (рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓) рд╕рд╛рдареА, рдЬреНрдпрд╛рдмрджреНрджрд▓ рдЖрдордЪреЗ рд╕рд░реНрд╡ рдХрд╛рди рдЧреБрдВрдЬрдд рд╣реЛрддреЗ, рдореА рдСрдЯреЛрдореЗрд╢рдирдЪреЗ рдПрдХ рд╕рд╛рджрд░реАрдХрд░рдг (рдкреАрдУрд╕реА - рдкреНрд░реВрдл рдСрдл рдХреЙрдиреНрд╕реЗрдкреНрдЯ) рдХреЗрд▓реЗ: рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЪрд╛ рд╕рдВрдЪ. рд╕рд╛рджрд░реАрдХрд░рдгрд╛рдирдВрддрд░, рдЬреЗрд╡реНрд╣рд╛ рд╡рд╛рджрд│реА, рдкреНрд░рджреАрд░реНрдШ рдЯрд╛рд│реНрдпрд╛рдВрдЪрд╛ рдореГрддреНрдпреВ рдЭрд╛рд▓рд╛, рддреЗрд╡реНрд╣рд╛ рддреЗ рдорд▓рд╛ рдореНрд╣рдгрд╛рд▓реЗ - рд╣реЗ рд╕рд░реНрд╡ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рд╡реИрдЪрд╛рд░рд┐рдХ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ рдЖрдордЪреЗ рдЬреЗрдирдХрд┐рдиреНрд╕ рдЧреБрд▓рд╛рдо рд▓рд┐рдирдХреНрд╕рд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдд!

рд╣реЗ рд╢рдХреНрдп рдЖрд╣реЗ рдХрд╛? рд╡рд┐рдВрдбреЛрдЬрдЪреНрдпрд╛ рдЦрд╛рд▓реА рдЕрд╕рд╛ рдЙрдмрджрд╛рд░, рджрд┐рд╡рд╛ рдбреАрдмреАрдП рдШреНрдпрд╛ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕рдЪреНрдпрд╛ рдЦрд╛рд▓реА рдкреЙрд╡рд░рд╢реЗрд▓рдЪреНрдпрд╛ рдЙрд╖реНрдгрддреЗрдордзреНрдпреЗ рдЪрд┐рдХрдЯрд╡рд╛? рд╣реЗ рдХреНрд░реВрд░ рдирд╛рд╣реА рдХрд╛?

Linux рд╡рд░ Powershell рд╡рд░реВрди MS SQL рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ
рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреНрдпрд╛ рдпрд╛ рд╡рд┐рдЪрд┐рддреНрд░ рд╕рдВрдпреЛрдЬрдирд╛рдд рдорд▓рд╛ рд╕реНрд╡рддрдГрд▓рд╛ рдмреБрдбрд╡рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ. рдЕрд░реНрдерд╛рдд, рдорд╛рдЭреНрдпрд╛ рд╕рд░реНрд╡ 30+ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рдиреЗ рдХрд╛рдо рдХрд░рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ. рдорд╛рдЭреНрдпрд╛ рдЖрд╢реНрдЪрд░реНрдпрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ, рдореА рдПрдХрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рджрд┐рд╡рд╕рд╛рдд рд╕рд░реНрд╡рдХрд╛рд╣реА рдареАрдХ рдХрд░рдгреНрдпрд╛рдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ. рдореА рдЧрд░рдо рдкрд╛рдардкреБрд░рд╛рд╡рд╛ рд▓рд┐рд╣рд┐рдд рдЖрд╣реЗ. рддрд░, рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реВрди рд▓рд┐рдирдХреНрд╕рдордзреНрдпреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдЕрдбрдЪрдгреА рдпреЗрдК рд╢рдХрддрд╛рдд?

sqlcmd vs Invoke-SqlCmd

рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдореБрдЦреНрдп рдлрд░рдХрд╛рдЪреА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ. рдЪрд╛рдВрдЧрд▓реА рдЬреБрдиреА рдЙрдкрдпреБрдХреНрддрддрд╛ sqlcmd рд╣реЗ рдЬрд╡рд│рдЬрд╡рд│ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╕рд╣ Linux рдЕрдВрддрд░реНрдЧрдд рджреЗрдЦреАрд▓ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЖрдореНрд╣реА -Q рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд╡реЗрд░реА рдкрд╛рд╕ рдХрд░рддреЛ, рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓ -i рдореНрд╣рдгреВрди рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ -o рдореНрд╣рдгреВрди. рдкрдг рдлрд╛рдИрд▓рдЪреА рдирд╛рд╡реЗ рдЕрд░реНрдерд╛рддрдЪ рдХреЗрд╕-рд╕реЗрдиреНрд╕реЗрдЯрд┐рд╡реНрд╣ рдмрдирд╡рд▓реА рдЖрд╣реЗрдд. рдЬрд░ рддреБрдореНрд╣реА -i рд╡рд╛рдкрд░рдд рдЕрд╕рд╛рд▓ рддрд░ рдлрд╛рдИрд▓рдордзреНрдпреЗ рд╢реЗрд╡рдЯреА рд▓рд┐рд╣рд╛:

GO
EXIT

рдЬрд░ рд╢реЗрд╡рдЯреА EXIT рдирд╕реЗрд▓, рддрд░ sqlcmd рдЗрдирдкреБрдЯрдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдвреЗ рдЬрд╛рдИрд▓, рдЖрдгрд┐ рдЬрд░ рдЖрдзреА рдмрд╛рд╣реЗрд░ рдкрдбрд╛ рдирд╛рд╣реА GO, рдирдВрддрд░ рд╢реЗрд╡рдЯрдЪреА рдЖрдЬреНрдЮрд╛ рдХрд╛рд░реНрдп рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рд░реНрд╡ рдЖрдЙрдЯрдкреБрдЯ, рдирд┐рд╡рдб, рд╕рдВрджреЗрд╢, рдкреНрд░рд┐рдВрдЯ рдЗ.

Invoke-SqlCmd рдбреЗрдЯрд╛рд╕реЗрдЯ, рдбреЗрдЯрд╛рдЯреЗрдмрд▓реНрд╕ рдХрд┐рдВрд╡рд╛ рдбреЗрдЯрд╛рд░реЛрдЬ рдореНрд╣рдгреВрди рдкрд░рд┐рдгрд╛рдо рддрдпрд╛рд░ рдХрд░рддреЗ. рдореНрд╣рдгреВрди, рдЖрдкрдг рд╕рд╛рдзреНрдпрд╛ рдирд┐рд╡рдбреАрдЪреНрдпрд╛ рдирд┐рдХрд╛рд▓рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реНрдпрд╛рд╕, рдЖрдкрдг рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ sqlcmd, рддреНрдпрд╛рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рдХрд╛рд╣реАрддрд░реА рдЬрдЯрд┐рд▓ рдорд┐рд│рд╡рдгреЗ рдЬрд╡рд│рдЬрд╡рд│ рдЕрд╢рдХреНрдп рдЖрд╣реЗ: рдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ Invoke-SqlCmd. рдкрд░рдВрддреБ рдпрд╛ рд╕рдВрдШрд╛рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╡рд┐рдиреЛрдж рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд:

  • рдЬрд░ рддреБрдореНрд╣реА рддрд┐рдЪреНрдпрд╛рдХрдбреЗ рдлрд╛рдЗрд▓ рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рдХреЗрд▓реАрдд -рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓рдордЧ рдмрд╛рд╣реЗрд░ рдкрдбрд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рд╢рд┐рд╡рд╛рдп, рддреЗ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рддреНрд░реБрдЯреА рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ
  • -рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдирд╛рд╣реА, рдХрдорд╛рдВрдб рддреБрдореНрд╣рд╛рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рдкрд░рд┐рдгрд╛рдо рджреЗрдИрд▓
  • рд╕рд░реНрд╡реНрд╣рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЛрди рд╡рд╛рдХреНрдпрд░рдЪрдирд╛ рдЖрд╣реЗрдд: -рд╕рд░реНрд╡реНрд╣рд░рдЗрдиреНрд╕реНрдЯрдиреНрд╕ -рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡ -рдкрд╛рд╕рд╡рд░реНрдб -рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ рдорд╛рдзреНрдпрдорд╛рддреВрди -рдХрдиреЗрдХреНрд╢рдирд╕реНрдЯреНрд░рд┐рдВрдЧ. рд╡рд┐рдЪрд┐рддреНрд░рдкрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ, рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд 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 рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ. рдпреВ Invoke-SqlCmd рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ -рдЪрд▓. рдЬрд░реА рд╕реНрд╡рддрдГ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгрд╛рд░реЗ рдкреЕрд░рд╛рдореАрдЯрд░ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЕрд╕рд▓реЗ рддрд░реА, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕реНрд╡рддрдГрдЪ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд - рддреБрдореНрд╣реА рд╢реЗрд▓рдордзреАрд▓ рдХреЛрдгрддреЗрд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛. рддрдерд╛рдкрд┐, рдореА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдореБрд│реЗ рдирд╛рд░рд╛рдЬ рдЭрд╛рд▓реЛ рдЖрдгрд┐ рдореА рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╡рд░ рдЕрдЬрд┐рдмрд╛рдд рдЕрд╡рд▓рдВрдмреВрди рди рд░рд╛рд╣рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛ рдЖрдгрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╣рд╛рди рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдореА рдЙрджреНрдзрдЯрдкрдгреЗ рдЖрдгрд┐ рдЖрджрд┐рдо рд╡рд╛рдЧрд▓реЛ:

# 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 рдЪрд╛рд▓рд╡рд▓реЗ, рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪрд╛ рдЧреИрд░рд╡рд╛рдкрд░ рдХреЗрд▓рд╛, рд╣реА рдлрд╛рдИрд▓ рдСрдбрд┐рдЯ рдкреНрд▓реЗрдЯрд╢реА рд╕рдВрд▓рдЧреНрди рдХреЗрд▓реА. рд╕реБрджреИрд╡рд╛рдиреЗ, рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡реНрд╣рд░рдиреЗ рдЬреЗрдирдХрд┐рдиреНрд╕ рд╕рд╛рд░рдЦреНрдпрд╛рдЪ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдХрд╛рдо рдХреЗрд▓реЗ, рддреЗ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдХреЗрд▓реЗ рдЧреЗрд▓реЗ:

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) рдлреАрд▓реНрдбрдордзреНрдпреЗ рдЯрд╛рдХрддреЛ. рдЕрд░реНрдерд╛рдд, рд╣реА рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рд╡реЗрдЧрд│реА рдкрдбрд▓реА, рдХрд╛рд░рдг рдорд▓рд╛ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡реНрд╣рд░рдРрд╡рдЬреА рдЖрд░рдбреАрдПрд╕ рдорд┐рд│рд╛рд▓рд╛ рдЖрдгрд┐ рдлрд╛рдИрд▓рд╡рд░ рдЕрдирдиреНрдп рд▓реЙрдХ рдШреЗрдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдореБрд│реЗ рдпреВрдПрдирд╕реАрджреНрд╡рд╛рд░реЗ рдмрд▓реНрдХ рдЗрдиреНрд╕рд░реНрдЯ рдЕрдЬрд┐рдмрд╛рдд рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА рдЖрдгрд┐ рдЖрд░рдбреАрдПрд╕ рд╕рд╣ рд╣реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдирд╢рд┐рдмрд╛рдд рдЕрд╕рддреЗ. рдЕрдЧрджреА рд╕реБрд░реБрд╡рд╛рдд. рдореНрд╣рдгреВрди рдореА рдСрдбрд┐рдЯ рд▓рд╛рдЗрди рдУрд│реАрдиреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реВрди рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЭрд╛рдЗрди рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛