Замена одинарных кавычек в PowerShell или Excel CSV

#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. Большое спасибо! Работал безупречно