Linux เชชเชฐ Powershell เชฎเชพเช‚เชฅเซ€ MS SQL เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚

เช† เชฒเซ‡เช– เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ เช›เซ‡ เช…เชจเซ‡ เชฎเชพเชฐเซ€ เชฆเซเชƒเช–เชฆ เชตเชพเชฐเซเชคเชพเชจเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เช›เซ‡

เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เชฅเชˆ เชฐเชนเซเชฏเชพ เช›เซ‡ เชเซ€เชฐเซ‹ เชŸเชš PROD RDS (MS SQL) เชฎเชพเชŸเซ‡, เชœเซ‡เชจเชพ เชตเชฟเชถเซ‡ เช…เชฎเชพเชฐเชพ เชฌเชงเชพ เช•เชพเชจ เช—เซ‚เช‚เชœเชคเชพ เชนเชคเชพ, เชฎเซ‡เช‚ เช‘เชŸเซ‹เชฎเซ‡เชถเชจเชจเซเช‚ เชเช• เชชเซเชฐเซ‡เชเชจเซเชŸเซ‡เชถเชจ (POC - เชชเซเชฐเซ‚เชซ เช‘เชซ เช•เซ‹เชจเซเชธเซ‡เชชเซเชŸ) เช•เชฐเซเชฏเซเช‚: เชชเชพเชตเชฐเชถเซ‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซเชธเชจเซ‹ เชธเชฎเซ‚เชน. เชชเซเชฐเชธเซเชคเซเชคเชฟ เชชเช›เซ€, เชœเซเชฏเชพเชฐเซ‡ เชคเซ‹เชซเชพเชจเซ€, เชฒเชพเช‚เชฌเซ€ เชคเชพเชณเซ€เช“ เชฎเซƒเชคเซเชฏเซ เชชเชพเชฎเซ€, เช…เชตเชฟเชฐเชค เชคเชพเชณเซ€เช“เชฎเชพเช‚ เชซเซ‡เชฐเชตเชพเชˆ, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เช“เช เชฎเชจเซ‡ เช•เชนเซเชฏเซเช‚ - เช† เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เชตเซˆเชšเชพเชฐเชฟเช• เช•เชพเชฐเชฃเซ‹เชธเชฐ, เช…เชฎเชพเชฐเชพ เชฌเชงเชพ เชœเซ‡เชจเช•เชฟเชจเซเชธ เช—เซเชฒเชพเชฎเซ‹ Linux เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡!

เชถเซเช‚ เช† เชถเช•เซเชฏ เช›เซ‡? เชตเชฟเชจเซเชกเซ‹เชเชจเซ€ เชจเซ€เชšเซ‡เชฅเซ€ เช†เชตเชพ เช—เชฐเชฎ, เชฒเซ‡เชฎเซเชช เชกเซ€เชฌเซ€เช เชฒเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชฒเชฟเชจเช•เซเชธ เชนเซ‡เช เชณ เชชเชพเชตเชฐเชถเซ‡เชฒเชจเซ€ เช–เซ‚เชฌ เชœ เช—เชฐเชฎเซ€เชฎเชพเช‚ เชšเซ‹เช‚เชŸเชพเชกเซ‹? เชถเซเช‚ เช† เช•เซเชฐเซ‚เชฐ เชจเชฅเซ€?

Linux เชชเชฐ Powershell เชฎเชพเช‚เชฅเซ€ MS SQL เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเซเช‚
เชฎเชพเชฐเซ‡ เชฎเชพเชฐเซ€ เชœเชพเชคเชจเซ‡ เชคเช•เชจเซ€เช•เซ‹เชจเชพ เช† เชตเชฟเชšเชฟเชคเซเชฐ เชธเช‚เชฏเซ‹เชœเชจเชฎเชพเช‚ เชกเซ‚เชฌเซ€ เชœเชตเซเช‚ เชชเชกเซเชฏเซเช‚. เช…เชฒเชฌเชคเซเชค, เชฎเชพเชฐเซ€ เชฌเชงเซ€ 30+ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹เช เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเซ€ เชฆเซ€เชงเซเช‚. เชฎเชพเชฐเชพ เช†เชถเซเชšเชฐเซเชฏ เชฎเชพเชŸเซ‡, เชฎเซ‡เช‚ เชเช• เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เชฆเชฟเชตเชธเชฎเชพเช‚ เชฌเชงเซเช‚ เช เซ€เช• เช•เชฐเชตเชพเชฎเชพเช‚ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เช•เชฐเซเชฏเซเช‚. เชนเซเช‚ เช—เชฐเชฎ โ€‹โ€‹เช…เชจเซเชธเช‚เชงเชพเชจเชฎเชพเช‚ เชฒเช–เซเช‚ เช›เซเช‚. เชคเซ‹, เชชเชพเชตเชฐเชถเซ‡เชฒ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹เชจเซ‡ เชตเชฟเชจเซเชกเซ‹เชเชฅเซ€ เชฒเชฟเชจเช•เซเชธเชฎเชพเช‚ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชคเชฎเซ‡ เช•เชˆ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹?

sqlcmd vs Invoke-SqlCmd

เชšเชพเชฒเซ‹ เชนเซเช‚ เชคเชฎเชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชšเซเชšเซ‡เชจเชพ เชฎเซเช–เซเชฏ เชคเชซเชพเชตเชคเชจเซ€ เชฏเชพเชฆ เช…เชชเชพเชตเซ€เชถ. เชธเชพเชฐเซ€ เชœเซ‚เชจเซ€ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ sqlcmd เชคเซ‡ เชฒเช—เชญเช— เชธเชฎเชพเชจ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพ เชธเชพเชฅเซ‡, Linux เชนเซ‡เช เชณ เชชเชฃ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช…เชฎเซ‡ -Q, เช‡เชจเชชเซเชŸ เชซเชพเช‡เชฒ -i เชคเชฐเซ€เช•เซ‡ เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ -o เชคเชฐเซ€เช•เซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เซเชตเซ‡เชฐเซ€ เชชเชพเชธ เช•เชฐเซ€เช เช›เซ€เช. เชชเชฐเช‚เชคเซ เชซเชพเช‡เชฒ เชจเชพเชฎเซ‹, เช…เชฒเชฌเชคเซเชค, เช•เซ‡เชธ-เชธเช‚เชตเซ‡เชฆเชจเชถเซ€เชฒ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ -i เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชซเชพเช‡เชฒเชฎเชพเช‚ เช…เช‚เชคเซ‡ เชฒเช–เซ‹:

GO
EXIT

เชœเซ‹ เช…เช‚เชคเซ‡ เช•เซ‹เชˆ เชเช•เซเชเชฟเชŸ เชจ เชนเซ‹เชฏ, เชคเซ‹ sqlcmd เช‡เชจเชชเซเชŸเชจเซ€ เชฐเชพเชน เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เช†เช—เชณ เชตเชงเชถเซ‡, เช…เชจเซ‡ เชœเซ‹ เชชเชนเซ‡เชฒเชพเช‚ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเซ‹ เชจเชนเซ€เช‚ GO, เชชเช›เซ€ เช›เซ‡เชฒเซเชฒเซ‹ เช†เชฆเซ‡เชถ เช•เชพเชฎ เช•เชฐเชถเซ‡ เชจเชนเซ€เช‚. เช†เช‰เชŸเชชเซเชŸ เชซเชพเช‡เชฒเชฎเชพเช‚ เชคเชฎเชพเชฎ เช†เช‰เชŸเชชเซเชŸ, เชธเชฟเชฒเซ‡เช•เซเชŸ, เชฎเซ‡เชธเซ‡เชœ, เชชเซเชฐเชฟเชจเซเชŸ เชตเช—เซ‡เชฐเซ‡เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡.

Invoke-SqlCmd เชกเซ‡เชŸเชพเชธเซ‡เชŸ, เชกเซ‡เชŸเชพเชŸเซ‡เชฌเชฒเซเชธ เช…เชฅเชตเชพ เชกเซ‡เชŸเชพเชฐเซ‹ เชคเชฐเซ€เช•เซ‡ เชชเชฐเชฟเชฃเชพเชฎ เช‰เชคเซเชชเชจเซเชจ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, เชœเซ‹ เชคเชฎเซ‡ เชธเชฐเชณ เชชเชธเช‚เชฆเช—เซ€เชจเชพ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ sqlcmd, เชคเซ‡เชจเชพ เช†เช‰เชŸเชชเซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช•เช‚เชˆเช• เชœเชŸเชฟเชฒ เชฎเซ‡เชณเชตเชตเซเช‚ เชฒเช—เชญเช— เช…เชถเช•เซเชฏ เช›เซ‡: เช† เชฎเชพเชŸเซ‡ เชคเซเชฏเชพเช‚ เช›เซ‡ Invoke-SqlCmd. เชชเชฐเช‚เชคเซ เช† เชŸเซ€เชฎเชจเชพ เชชเซ‹เชคเชพเชจเชพ เชœเซ‹เช•เซเชธ เชชเชฃ เช›เซ‡:

  • เชœเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เชซเชพเช‡เชฒ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‹ เช›เซ‹ -เช‡เชจเชชเซเชŸ เชซเชพเช‡เชฒเชชเช›เซ€ เชฌเชนเชพเชฐ เชจเซ€เช•เชณเซ‹ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€, เชตเชงเซเชฎเชพเช‚, เชคเซ‡ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เชญเซ‚เชฒ เชชเซ‡เชฆเชพ เช•เชฐเซ‡ เช›เซ‡
  • -เช†เช‰เชŸเชชเซเชŸ เชซเชพเช‡เชฒ เชจเชพ, เช†เชฆเซ‡เชถ เชคเชฎเชจเซ‡ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชคเชฐเซ€เช•เซ‡ เชชเชฐเชฟเชฃเชพเชฎ เช†เชชเซ‡ เช›เซ‡
  • เชธเชฐเซเชตเชฐเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเซ‡ เชตเชพเช•เซเชฏเชฐเชšเชจเชพ เช›เซ‡: -เชธเชฐเซเชตเชฐเช‡เชจเซเชธเซเชŸเชจเซเชธ -เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชจเชพเชฎ -เชชเชพเชธเชตเชฐเซเชก -เชกเซ‡เชŸเชพเชฌเซ‡เช เช…เชจเซ‡ เชฎเชพเชฐเชซเชคเซ‡ -เช•เชจเซ‡เช•เซเชถเชจเชธเซเชŸเซเชฐเชฟเช‚เช—. เชตเชฟเชšเชฟเชคเซเชฐ เชฐเซ€เชคเซ‡, เชชเซเชฐเชฅเชฎ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ 1433 เชธเชฟเชตเชพเชฏเชจเชพ เชชเซ‹เชฐเซเชŸเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเซ‹ เชถเช•เซเชฏ เชจเชฅเซ€.
  • เชŸเซ‡เช•เซเชธเซเชŸ เช†เช‰เชŸเชชเซเชŸ, PRINT เชฒเช–เซ‹, เชœเซ‡ เชซเช•เซเชค "เชชเช•เชกเชพเชฏเซ‡เชฒ" เช›เซ‡ sqlcmdเชฎเชพเชŸเซ‡ Invoke-SqlCmd เชเช• เชธเชฎเชธเซเชฏเชพ เช›เซ‡
  • เช…เชจเซ‡ เชธเซŒเชฅเซ€ เช…เช—เชคเซเชฏเชจเซเช‚: เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡ เชคเชฎเชพเชฐเชพ Linux เชชเชพเชธเซ‡ เช† 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 เชšเชฒเชพเชตเซเชฏเซเช‚, เช†เช‰เชŸเชชเซเชŸ เชซเชพเช‡เชฒเชฎเชพเช‚ เช•เซ‹เชˆ เชชเซเชฐเช•เชพเชฐเชจเซ‹ เชฆเซเชฐเซเชชเชฏเซ‹เช— เชฎเชณเซเชฏเซ‹, เช† เชซเชพเช‡เชฒเชจเซ‡ เช‘เชกเชฟเชŸ เชชเซเชฒเซ‡เชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเซ€ เชฆเซ€เชงเซ€. เชธเชฆเชจเชธเซ€เชฌเซ‡, 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() 
  }  

เชธเชพเชฎเช—เซเชฐเซ€ เชชเชธเช‚เชฆ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ ID เชฆเซเชตเชพเชฐเชพ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เช•เซเชฐเชฎเชฎเชพเช‚ n (เช“เชณเช–) เชชเชธเช‚เชฆ เช•เชฐเซ€เชจเซ‡.

เช†เช—เชณเชจเชพ เชฒเซ‡เช–เชฎเชพเช‚ เชนเซเช‚ เช† เชฌเชงเซเช‚ เชœเซ‡เชจเช•เชฟเชจเซเชธ เชธเชพเชฅเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชตเชฟเชถเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชฎเชพเช‚ เชœเชˆเชถ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹