gpt4 book ai didi

powershell - 使用PowerShell从CSV将数据按行明智地插入到SQL表中

转载 作者:行者123 更新时间:2023-12-02 23:54:06 24 4
gpt4 key购买 nike

因此,在这种特殊情况下,我需要将多个CSV文件中的数据插入多个SQL tables中。我遇到过this SO link,它逐行插入数据。以下是链接中的代码段-

Import-CSV .\yourcsv.csv | ForEach-Object {Invoke-Sqlcmd `
-Database $database -ServerInstance $server `
-Query "insert into $table VALUES ('$($_.Column1)','$($_.Column2)')"
}

我面临的问题是,我有多个带有不同列数的 CSVs。因此,不存在对代码段 进行硬编码的选项VALUES('$($_.Column1)','$($_.Column2)')

此外,有些表包含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表的所有列名称。我正在尝试使其适合解决方案-
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 header 是否与sql列名匹配。

要在 Import-Csv -ed之后获取列名,可以使用
$CSV.Psobject.Properties.Name

关于powershell - 使用PowerShell从CSV将数据按行明智地插入到SQL表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50252209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com