【发布时间】:2019-10-22 04:03:42
【问题描述】:
我有 4 个文件,其 csv 标头与以下文件相同
Column1,Column2,Column3,Column4
但我只需要来自 Column2,Column3,Column4 的数据,就可以使用 BCP 将数据导入 SQL 数据库。我正在使用 PowerShell 选择我想要的列并使用 BCP 导入所需的数据,但我的 powershell 执行没有错误,并且我的数据库表中没有更新数据。我可以知道如何设置BCP 将输出从 Powershell 导入数据库表。这是我的 powershell 脚本
$filePath = Get-ChildItem -Path 'D:\test\*' -Include $filename
$desiredColumn = 'Column2','Column3','Column4'
foreach($file in $filePath)
{
write-host $file
$test = import-csv $file | select $desiredColumn
write-host $test
$action = bcp <myDatabaseTableName> in $test -T -c -t";" -r"\n" -F2 -S <MyDatabase>
}
这些是 powershell 脚本的输出
D:\test\sample1.csv
@{column2=111;column3=222;column4=333} @{column2=444;column3=555;column4=666}
D:\test\sample2.csv
@{column2=777;column3=888;column4=999} @{column2=aaa;column3=bbb;column4=ccc}
【问题讨论】:
-
您的文件显示有一个逗号 (,) 作为分隔符,但是您的 BCP 命令设置为 (-t";") 这告诉 bcp 分号字符是您的字段分隔符.文件中的实际分隔符是哪个?逗号还是分号?
-
最后,您可以使用 BCP 跳过一列,而不是要求 powershell 重新创建数据行。你能接受这个作为答案吗?还是必须在 BCP 之前使用 powershell 转换文件?我不会使用脚本语言来处理传入的数据,我只会使用 BCP 或 SSIS。为什么不为此使用 SSIS?我有我的理由,但很好奇你为什么选择不这样做。
-
我不熟悉 BCP 或 BCP。那么 BCP 能够胜任这项工作吗?我原来的 csv 分隔符是逗号
-
所需的输出是我需要根据来自 CSV 的数据更新数据库表列。我的 CSV 有四列,但我的数据库表只有 3 列
-
是的,BCP 可以胜任。 SSIS 也可以做到这一点。但是 BCP 可能更适合您,因为您似乎更喜欢编写脚本并且可能希望避免使用 gui 开发环境解决方案。
标签: sql powershell bcp