Вставить строку данных в таблицу SQL из CSV с помощью PowerShell
Так что у меня есть этот конкретный сценарий, где мне нужно вставить данные из нескольких 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])')"
}
Но это не похоже на работу. Я боролся с этим в течение достаточно долгого времени и исчерпал идеи. Свежая пара глаз будет с благодарностью.
1 ответ
Попробуй это
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 именам столбцов sql.
Чтобы получить имена столбцов один раз Import-Csv
Вы можете использовать
$CSV.Psobject.Properties.Name