本節書摘來自異步社群出版社《powershell v3—sql server 2012資料庫自動化運維權威指南》一書中的第2章,第2.21節,作者:【加拿大】donabel santos,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
本方案描述了如何用powershell和bcp将csv檔案導入sql server。
為了測試導入,首先建立一個類似于adventureworks2008r2資料庫的person.person表person,簡單修改下。我們建立test架構,并移除一些限制,保持該表盡可能簡單和獨立。
如果test.person不存在你的環境中,讓我們建立它。打開ssms,運作如下代碼。
1.通過“start | accessories | windows powershell | windows powershell ise”打開powershell控制台。
2.首先添加一些輔助函數。輸入如下并執行。
3.添加如下腳本并運作。
使用bcp實施批量導入是一個直接的任務——我們需要使用invoke-expression cmdlet并傳入bcp指令。然而,在本方案中,我們整理了腳本,并以一對輔助函數開頭。
第一個輔助函數truncate-table,是一個簡單的用于清空test.person表的輔助函數,該表用于導入記錄。該函數通過使用invoke-sqlcmd cmdlet将truncate table指令傳遞給sql server。使用該函數時,隻需調用。
第二個輔助函數get-personcount,隻需傳回導入到test.person表的記錄行數。這也使用了invoke-sqlcmd cmdlet。調用該函數時,使用如下代碼。
本方案的核心是根據建立的bcp導入指令。
該bcp指令指向導入檔案,它指定管道符号作為域分隔符,換行符為行分隔符。
一旦指令被建立,我們需要傳遞給invoke-expression。
我們也使用start-sleep cmdlet添加延遲,延遲間隔為2秒,在我們計數前可以insert。這是避免競争的一種間單方式,但對于本方案的目的來說,已經足夠了。
使用bulk insert實施批量導入方案
使用bcp實施批量導出方案
本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。