《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.19 使用bcp实施批量导出...
本節(jié)書摘來自異步社區(qū)出版社《PowerShell V3—SQL Server 2012數(shù)據(jù)庫自動化運維權威指南》一書中的第2章,第2.19節(jié),作者:【加拿大】Donabel Santos,更多章節(jié)內(nèi)容可以訪問云棲社區(qū)“異步社區(qū)”公眾號查看。
2.19 使用bcp實施批量導出
本方案描述了如何用PowerShell和bcp將表內(nèi)容導出到CSV文件。
2.19.1 準備
確保您可以訪問AdventureWorks2008R2數(shù)據(jù)庫。我們將Person.Person表導出到一個時間戳標記的文本文件中,通過管道符號(|)分割。
創(chuàng)建C:TempExports目錄,如果還沒有在你的系統(tǒng)中創(chuàng)建。
2.19.2 如何做…
1.通過“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打開PowerShell控制臺。
2.添加如下腳本,并運行。
$server = "KERRIGAN" $table = "AdventureWorks2008R2.Person.Person" $curdate = Get-Date -Format "yyyy-MM-dd_hmmtt" $foldername = "C:\Temp\Exports\" #format file name $formatfilename = "$($table)_$($curdate).fmt" #export file name $exportfilename = "$($table)_$($curdate).csv" $destination_exportfilename = "$($foldername)$($exportfilename)" $destination_formatfilename = "$($foldername)$($formatfilename)" #command to generate format file $cmdformatfile = "bcp $table format nul -T -c -t `"|`" -r `"\n`" -f `"$($destination_formatfilename)`" -S$($server)" #command to generate the export file $cmdexport = "bcp $($table) out `"$($destination_exportfilename)`" -S$($server) -T -f `"$destination_formatfilename`"" <# $cmdformatfile gives you something like this: bcp AdventureWorks2008R2.Person.Person format nul -T -c -t "|" -r "\n" –f "C:\Temp\Exports\AdventureWorks2008R2.Person.Person_2011-12-27_913PM.fmt" –S KERRIGAN $cmdexport gives you something like this: bcp AdventureWorks2008R2.Person.Person out "C:\Temp\Exports\AdventureWorks20008R2.Person.Person_2011-12-27_913PM.csv" –S KERRIGAN -T -c –f "C:\Temp\Exports\AdventureWorks2008R2.Person.Person_2011-12-27_913PM.fmt" #> #run the format file command Invoke-Expression $cmdformatfile #delay 1 sec, give server some time to generate the format file #sleep helps us avoid race conditions Start-Sleep -s 1 #run the export command Invoke-Expression $cmdexport #check the folder for generated file explorer.exe $foldername2.19.3 如何實現(xiàn)…
使用SQL Server的bcp命令從SQL Server導出記錄可能更快。它的應用更廣泛,因為bcp提供了更可擴展的導出格式。
bcp的默認導出格式是使用跳格鍵(t)作為域分割符,使用回車換行(rn)作為換行分隔符。如果你想修改,需要創(chuàng)建并使用一個格式化文件來指定你想導出的格式。
在我們的方案中,我們首先用時間戳命名格式化文件和導出的文件。
$curdate = Get-Date -Format "yyyy-MM-dd_hmmtt" $foldername = "C:\Temp\Exports\" #format file name $formatfilename = "$($table)_$($curdate).fmt" #export file name $exportfilename = "$($table)_$($curdate).csv" $destination_exportfilename = "$($foldername)$($exportfilename)" $destination_formatfilename = "$($foldername)$($formatfilename)"然后,我們創(chuàng)建產(chǎn)生格式化文件的字符串。
#command to generate format file $cmdformatfile = "bcp $table format nul -T -c -t `"|`" -r `"\n`" -f `"$($destination_formatfilename)`" -S$($server)"注意,因為實際的命令需要使用雙引號(”),當我們創(chuàng)建命令時,需要通過反引號(`)轉義雙引號。
創(chuàng)建的命令如下所示。
bcp AdventureWorks2008R2.Person.Person format nul -T -c -t "|" -r "\n" -f "C:\Temp\Exports\AdventureWorks2008R2.Person.Person_2011-12-27_913PM.fmt" -SKERRIGAN我們使用剛剛創(chuàng)建的格式化文件創(chuàng)建了導出記錄的命令。
#command to generate the export file $cmdexport = "bcp $($table) out `"$($destination_exportfilename)`" -S$($server) -T -f `"$destination_formatfilename`""我們創(chuàng)建的命令如下。
bcp AdventureWorks2008R2.Person.Person out "C:\Temp\Exports\AdventureWorks2008R2.Person.Person_2011-12-27_913PM.csv" -SKERRIGAN -T -f "C:\Temp\Exports\AdventureWorks2008R2.Person.Person_2011-12-27_913PM.fmt"當包含命令的字符串完成之后,我們能使用Invoke-Expression cmdlet執(zhí)行這個命令。我們首先運行格式化文件創(chuàng)建命令,然后使用Start-Sleep cmdlet停止1秒鐘,確保已經(jīng)創(chuàng)建了格式化文件,然后調(diào)用命令進行真正的導出工作。
#run the format file command Invoke-Expression $cmdformatfile #delay 1 sec, give server some time to generate #the format file #sleep helps us avoid race conditions Start-Sleep -s 1 #run the export command Invoke-Expression $cmdexport如果我們不等待,所有的命令有可能執(zhí)行得更快,并且導出命令有可能在格式化文件產(chǎn)生好之前執(zhí)行。這將導致錯誤,因為bcp命令不能發(fā)現(xiàn)格式化文件。
最后,我們打開“Windows Explorer”,可以看到生成的文件。
#check the folder for generated file explorer.exe $foldername2.19.4 請參閱…
使用Invoke-Sqlcmd實施批量導出方案
更多關于bcp格式化文件的選項可參見:
總結
以上是生活随笔為你收集整理的《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.19 使用bcp实施批量导出...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 依托于应用工厂的应用实现的最佳实践
- 下一篇: 测试并发应用(七)配置Eclipse来调