【发布时间】:2021-09-06 11:52:25
【问题描述】:
我正在尝试使用 PowerShell 将 CSV 导入 SQL Server 数据库。这就是我正在做的:
$database="myTestDB"
$server="TEST_SERVER"
$table="LOG_TEST"
Import-CSV C:\test\OUTPUT3.csv | ForEach-Object {Invoke-Sqlcmd -Database $database -ServerInstance $server -Query "INSERT INTO $table VALUES ('$($_.col1)',$($_.col2),'$($_.col3)')"}
但我不断收到此错误:
Invoke-Sqlcmd : Incorrect syntax near ','.
At line:1 char:57
+ ... ach-Object {Invoke-Sqlcmd -Database $database -ServerInstance $server ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [Invoke-Sqlcmd], SqlPowerShellSqlExecutionException
+ FullyQualifiedErrorId : SqlError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand
Col2 是一个整数。我尝试了不同的方法和符号从 CSV 中获取变量,但总是出现类似的错误。
任何帮助都会很棒。我一直在关注这个问题的答案......
How to import data from .csv in SQL Server using PowerShell?
谢谢!
更多信息:
我已经改变了一些东西以简化场景,所以我可以在这里提供更多细节。该表由 3 个 varchar 列组成。我相信最初的错误是由于数据的一些问题。我正在使用的数据文件保存为 test.csv:
col1,col2,col3
a,b,c
1,2,3
d,e,f
4,5,6
g,h,i
7,8,9
我的脚本是:
$database="myTestDB"
$server="Test_Server"
$table="csvLoadTest"
$Query="INSERT INTO $table VALUES ('$($_.col1)','$($_.col2)','$($_.col3)')"
Import-CSV C:\Test_Server\test.csv | ForEach-Object {Invoke-Sqlcmd -Database $database -ServerInstance $server -Query $Query}
我现在遇到的问题是这些字段是空白的。它运行并插入记录,但字段中没有数据。
附带说明...我知道这会带来 SQL 注入风险,但这对我来说并不是一个真正的问题,在此设置中,出于多种原因。我只是想让它在这一点上工作。谢谢!
【问题讨论】:
-
你会遇到这样的 SQL 注入问题。你可以通过
-Variables。考虑使用bcp或Write-SqlTableData -
运行它,看看它给出了什么:
Import-CSV C:\test\OUTPUT3.csv | ForEach-Object {"INSERT INTO $table VALUES ('$($_.col1)',$($_.col2),'$($_.col3)')"} -
没有样本数据,这里大家只是猜测
-
使用您的原始脚本。您不能在 ForEach-Object 之外使用 $_。您还可以在循环内移动 $Query 的定义。
-
@Jim 你熟悉“接受”答案吗?
标签: sql sql-server powershell