我使用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的初学者,并不知道该怎么做。
是否有任何机构有任何建议?
非常感谢!
答案 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可以看到的网络位置。