2014-07-02 60 views
1

我使用SQL Server 2012和Windows PowerShell。我嘗試從本地CSV文件批量插入到遠程服務器中的表中。我試圖通過使用sqlcmd連接到該服務器來執行sql語句來將批量插入與PowerShell腳本相結合。我拿出批量從CSV文件插入到遠程服務器中的表格

$path= "C:\UT\testdata.csv" 
$customerSizeQuery = "BULK INSERT dbo.test FROM '$path' WITH (FIELDTERMINATOR =',',  ROWTERMINATOR ='\n');" 
# $server and $database is fit as the exact server and database name in my real script 
SQLCMD -W -S $server -d $database -h-1 -Q ("$customerSizeQuery") 

顯然它不工作,因爲路徑是我的本地路徑。

然後我試圖把文件內容放到一個變量中,但它仍然有錯誤。它似乎說$ var不是一張表

$path= "C:\UT\testdata.csv" 
$var= get-content $path 
$customerSizeQuery = "BULK INSERT dbo.test FROM $var WITH (FIELDTERMINATOR =',',  ROWTERMINATOR ='\n');" 
# $server and $database is fit as the exact server and database name in my real script 
SQLCMD -W -S $server -d $database -h-1 -Q ("$customerSizeQuery") 

我是一個在sql和powershell的初學者,並沒有一個想法如何做到這一點。

有沒有任何建議?

非常感謝!

回答

0

BULK INSERT命令要求您提供一個數據文件,以便SQL Server實例可以訪問它(請參閱http://msdn.microsoft.com/en-us/library/ms188365.aspx)。據我所知,沒有辦法將文件的內容指定爲BULK INSERT輸入(正如你在第二次嘗試中所做的那樣)。

如果您的服務器通過網絡看到您的客戶端,則可以嘗試使用UNC指定CSV文件,例如, \\客戶\ UT \ testdata.csv。或者,您可以將CSV文件複製到SQL Server所看到的網絡位置。

4

如果您的本地計算機上安裝了SQL客戶端工具,爲什麼不使用bcp實用程序?

$path = 'C:\UT\testdata.csv' 
$outFile = 'C:\UT\bcpOut.txt' 
bcp -W -S $server -d $database -i $path -o $outFile -t, -T

有關bcp命令的詳細信息,請參閱this MSDN page