Вставить строку данных в таблицу SQL из CSV с помощью PowerShell - PullRequest
0 голосов
/ 09 мая 2018

Таким образом, у меня есть конкретный сценарий, в котором мне нужно вставить данные из нескольких файлов 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 Ответ

0 голосов
/ 09 мая 2018

Попробуйте это

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 -ed, вы можете использовать

$CSV.Psobject.Properties.Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...