2014-06-18 27 views
-1

我正在包裝一個腳本,它獲取軟件版本並將它們放入CSV中,然後返回到PowerShell,然後返回到SQL。某些軟件名稱中有單引號,不允許導入到SQL。我試圖在最後的SQL導出之前的某個時間點用這些單引號替換這些單引號。我的第一個直覺是通過PowerShell操作excel中的查找和替換功能來進行替換,但我不知道如何去解決這個問題,或者如果這是最好的方法。在PowerShell或Excel中替換單引號CSV CSV

任何意見非常感謝。我對這一切都很陌生。

感謝

編輯:感謝您的建議,到目前爲止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'附近語法不正確。」

+4

如果您顯示您已有的代碼,您將獲得更多幫助,而不是以抽象的方式談論您的問題。假設您正在構建和正確執行插入,單引號與SQL數據完全合法。除非您有另一個需要這個中間CSV文件的情況,否則聽起來您正在採取一種非常複雜的方式將數據導入數據庫。 – alroc

+0

在原始文章中編輯了一些代碼。我每天都使用CSV來記錄軟件版本,使用SQL來維護當前已安裝軟件和版本的列表。這可能是令人費解的,但這是我必須審查,並不是一個直接的問題。我的變量插入值有98%需要使用,但其中的5個在其名稱中包含撇號,Powerhell在爲這五個使用invoke-sqlcmd時會引發錯誤。感謝您的幫助至今 – Oggy

回答

0

答案是在您的字符串中創建子表達式來替換'''

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插入。

+0

非常感謝!完美無瑕地工作 – Oggy