我試圖從CSV文件中讀取值,將它們嵌入到INSERT T-SQL語句中,並使用Invoke-Sqlcmd運行該語句。將多個變量從csv文件傳遞到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 : The format used to define the new variable for Invoke-Sqlcmd cmdlet is invalid. Please use the 'var=value' format for defining a new variable.
的潛在空列是空或者包含單個數字編號1〜5。
I」中的所有列我嘗試了各種方法來轉義值,將其轉換爲不同的數據類型,向其中添加零或空字符串,null合併它,但我無法獲得可行的解決方案。
我有控制目標表,所以我很樂意爲空值傳遞零,空字符串,空或任何其他值作爲佔位符。
謝謝Matt。那種方法奏效了,」splatting「我覺得這樣會打開SQL注入攻擊的可能性,因此需要謹慎使用,但這在這種情況下不會成爲問題,我並不完全確定我的原始方法更好在這方面呢? – paulH