批量从CSV文件插入到远程服务器中的表

时间:2014-07-02 07:06:02

标签: sql sql-server powershell

我使用SQL server 2012和windows powershell。我尝试从本地CSV文件批量插入到远程服务器中的表。我试图通过使用sqlcmd连接到该服务器来执行sql语句,将批量插入与powershell脚本结合起来。我想出了

$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") 

显然它不起作用,因为path是我的本地路径。

然后我尝试将文件内容放到变量中但它仍然有错误。似乎说$ 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的初学者,并不知道该怎么做。

是否有任何机构有任何建议?

非常感谢!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

BULK INSERT命令要求您提供SQL Server实例可以访问它的数据文件(请参阅http://msdn.microsoft.com/en-us/library/ms188365.aspx)。据我所知,没有办法将文件的内容指定为BULK INSERT输入(正如您在第二次尝试中尝试的那样)。

如果您的服务器通过网络看到您的客户端,您可以尝试使用UNC指定CSV文件,例如\\客户\ UT \ testdata.csv。或者,您可以将CSV文件复制到SQL Server可以看到的网络位置。