我正在收集一个脚本,该脚本获取软件版本并将它们放入CSV中,然后返回PowerShell,最后返回SQL。某些软件名称中包含单引号,不允许导入SQL。我试图在最终的SQL导出之前的某个时刻用后退标记查找并替换这些单引号。我的第一直觉是通过powershell在excel中运行查找和替换功能来进行替换,但我不确定如何解决这个问题或者这是否是最好的方法。
非常感谢任何建议。我对这一切都很陌生。
由于
编辑:感谢alroc的建议。我正在为这篇文章使用以下内容:
##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'附近的语法不正确。"
答案 0 :(得分:2)
答案是在字符串中创建子表达式,将'
替换为''
。
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插入。