Я пытаюсь прочитать значения из файла CSV, встроить их в оператор INSERT T-SQL и запустить этот оператор с помощью Invoke-Sqlcmd.
Вот мой код:
Push-Location; Import-Module SQLPS -DisableNameChecking; Pop-Location
$InsertQry = "insert into $ImportTable VALUES ('`$(Col1)','`$(Col2)','`$(Col3)','`$(Col4)') "
Import-CSV $ImportFile | ForEach-Object { `
$RowData = "Col1=$($_.{My Ref})","Col2=$($_.{General satisfaction})","Col3=$($_.Helpfulness)","Col4=$($_.Effort)"
Invoke-Sqlcmd `
-Database $DBName -ServerInstance $SQLServer `
-Query $InsertQry `
-Variable $RowData
}
Скрипт отлично работает со строками в CSV-файле, которые содержат значения для каждого столбца. К сожалению, для меня некоторые строки в файле CSV содержат пустые значения (поэтому, возможно, только первые два столбца содержат значения). Эти строки не могут быть вставлены в таблицу, и возникает следующая ошибка:
Invoke-Sqlcmd: недопустимый формат для определения новой переменной для командлета Invoke-Sqlcmd. Пожалуйста, используйте формат var = value для определения новой переменной.
Потенциально пустые столбцы - это все столбцы, которые либо пусты, либо содержат однозначные числа от 1 до 5.
Я пробовал различные способы избежать значения, привести его к другому типу данных, добавить к нему ноль или пустую строку, объединить его с нулевым значением, но я не могу найти решение, которое работает.
У меня есть контроль над таблицей назначения, поэтому я был бы счастлив передать ноль, пустую строку, нуль или любое другое значение в качестве заполнителя для пустых значений.