Таким образом, у меня есть конкретный сценарий, в котором мне нужно вставить данные из нескольких файлов CSV
в несколько SQL tables
. Я сталкивался с этой ссылкой SO , которая вставляет данные построчно. Ниже приведен фрагмент кода по ссылке -
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])')"
}
Но, похоже, это не работает. Я боролся с этим в течение достаточно долгого времени и исчерпал идеи. Буду признателен за свежую пару глаз.