使用 PowerShell 从 CSV 中按行向 SQL Table 中插入数据
Insert data row wise in a SQL Table from a CSV using PowerShell
所以我遇到了这种特殊情况,我需要将多个 CSV
文件中的数据插入到多个 SQL tables
中。我遇到过 ,它逐行插入数据。以下是 link -
中的代码片段
Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
-Database $database -ServerInstance $server `
-Query "insert into $table VALUES ('$($_.Column1)','$($_.Column2)')"
}
我面临的问题是,我有多个 CSVs
,其中的列数不同。因此,硬编码代码片段 VALUES('$($_.Column1)','$($_.Column2)')
的选项不存在。
此外,还有 table 包含超过 100 列。所以,写VALUES('$($_.Column1)','$($_.Column2)')... so on upto '$($_.Column100)'
也不行。
我所做的是将 CSVs
中的列名称存储到 PowerShell 数组中,如下所示 -
$File = "C:\Users\vivek.singh\Desktop\ALL_EMAILS.csv"
$csvColumnNames = (Get-Content $File | Select-Object -First 1).Split(",")
现在 $csvColumnNames
,具有 ALL_EMAILS
table 的所有列名。我正在尝试将其纳入解决方案 -
Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
-Database $database -ServerInstance $server `
-Query "insert into $table VALUES ('$($csvColumnNames[0])','$($csvColumnNames[1])',..'$($csvColumnNames[$csvColumnNames.Length])')"
}
但是好像不行。我已经为此苦苦挣扎了很长一段时间,并且 运行 没有想法。一双新鲜的眼睛将不胜感激。
试试这个
Import-CSV .\yourcsv.csv | ForEach-Object {
$AllValues = "'"+($_.Psobject.Properties.Value -join "','")+"'"
Invoke-Sqlcmd -Database $database -ServerInstance $server `
-Query "insert into $table VALUES ($AllValues)"
}
它使用 -join 运算符连接当前行的所有值(使用前导和尾随 '
构建 $AllValues
变量,然后可以将其插入 sql命令。
检查 Csv headers 是否与 sql 列名称匹配由您决定。
要获取一次 Import-Csv
的列名,您可以使用
$CSV.Psobject.Properties.Name
所以我遇到了这种特殊情况,我需要将多个 CSV
文件中的数据插入到多个 SQL tables
中。我遇到过
Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
-Database $database -ServerInstance $server `
-Query "insert into $table VALUES ('$($_.Column1)','$($_.Column2)')"
}
我面临的问题是,我有多个 CSVs
,其中的列数不同。因此,硬编码代码片段 VALUES('$($_.Column1)','$($_.Column2)')
的选项不存在。
此外,还有 table 包含超过 100 列。所以,写VALUES('$($_.Column1)','$($_.Column2)')... so on upto '$($_.Column100)'
也不行。
我所做的是将 CSVs
中的列名称存储到 PowerShell 数组中,如下所示 -
$File = "C:\Users\vivek.singh\Desktop\ALL_EMAILS.csv"
$csvColumnNames = (Get-Content $File | Select-Object -First 1).Split(",")
现在 $csvColumnNames
,具有 ALL_EMAILS
table 的所有列名。我正在尝试将其纳入解决方案 -
Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
-Database $database -ServerInstance $server `
-Query "insert into $table VALUES ('$($csvColumnNames[0])','$($csvColumnNames[1])',..'$($csvColumnNames[$csvColumnNames.Length])')"
}
但是好像不行。我已经为此苦苦挣扎了很长一段时间,并且 运行 没有想法。一双新鲜的眼睛将不胜感激。
试试这个
Import-CSV .\yourcsv.csv | ForEach-Object {
$AllValues = "'"+($_.Psobject.Properties.Value -join "','")+"'"
Invoke-Sqlcmd -Database $database -ServerInstance $server `
-Query "insert into $table VALUES ($AllValues)"
}
它使用 -join 运算符连接当前行的所有值(使用前导和尾随 '
构建 $AllValues
变量,然后可以将其插入 sql命令。
检查 Csv headers 是否与 sql 列名称匹配由您决定。
要获取一次 Import-Csv
的列名,您可以使用
$CSV.Psobject.Properties.Name