#sql #excel #powershell #csv
#sql #excel #powershell #csv
Вопрос:
Я завершаю сценарий, который получает версии программного обеспечения и помещает их в CSV, затем обратно в powershell, а затем, наконец, в SQL. Некоторые имена программного обеспечения содержат одинарные кавычки, что запрещено для импорта в SQL. Я пытаюсь найти и заменить эти одинарные кавычки обратными галочками в какой-то момент перед окончательным экспортом SQL. Мой первый инстинкт — запустить функцию поиска и замены в Excel через powershell, чтобы выполнить замену, но я не уверен, как это сделать или это лучший способ.
Любые советы приветствуются. Я очень новичок во всем этом.
Спасибо
редактировать: Спасибо за совет до сих пор. Я работаю со следующим для этой части:
##SQL PART##
$CSV = Import-CSV -path $UpdatePath$($todaydate).csv
import-module sqlps
ForEach ($item in $CSV){
$CSVAppID = $($item.AppID)
$CSVAppName = $($item.AppName)
$CSVVersion = $($item.Version)
$SqlServer = "redacted"
$SqlDB = "redacted"
$SoftwareTable = "redacted"
Invoke-Sqlcmd -ServerInstance "$SQLServer" -Database "$SqlDB" -query "INSERT INTO dbo.ecca_sw_standard_2 (name, version, product_id) VALUES (N'$CSVAppName', N'$CSVVersion' , N'$CSVAppID')"
}
Некоторые значения переменных содержат одинарные кавычки в строках, и powershell выдает мне ошибку, когда доходит до этих нескольких. «Invoke-Sqlcmd: неправильный синтаксис рядом с «S»».
Комментарии:
1. Вы получите гораздо больше помощи, если покажете код, который у вас уже есть, вместо того, чтобы абстрактно рассказывать о своей проблеме. Одинарные кавычки совершенно законны в качестве данных SQL, при условии, что вы правильно создаете и выполняете свои вставки. Если у вас нет другой потребности в этом промежуточном CSV-файле, похоже, вы выбрали очень сложный путь для получения данных в вашей базе данных.
2. Отредактировал некоторый код в исходном сообщении. Я использую CSVs для ежедневной регистрации версий программного обеспечения, а SQL — для ведения текущего списка установленного программного обеспечения и версий. Это может быть запутанным, но это то, что мне нужно будет рассмотреть, и это не является непосредственной проблемой. 98% моих значений переменной insert принимают, но пять из них имеют апострофы в своих именах, и powershell выдает ошибку при использовании invoke-sqlcmd для этих пяти. Спасибо за помощь до сих пор
Ответ №1:
Ответ заключается в создании вложенных выражений в вашей строке для замены '
''
.
Invoke-Sqlcmd -ServerInstance "$SQLServer" -Database "$SqlDB" -query "INSERT INTO dbo.ecca_sw_standard_2 (name, version, product_id) VALUES (N'$($CSVAppName -replace "'", "''")', N'$($CSVVersion -replace "'", "''")' , N'$($CSVAppID -replace "'", "''")')"
Таким образом, при расширении строки она будет соответствующим образом экранирована для вставки SQL.
Комментарии:
1. Большое спасибо! Работал безупречно