天天看點

《PowerShell V3——SQL Server 2012資料庫自動化運維權威指南》——2.21 使用bcp實施批量導入

本節書摘來自異步社群出版社《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實施批量導出方案

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。