2015-08-19 52 views
0

我使用powershell執行更新sql表。Powershell更新sql字符串在某些字符處拋出錯誤

'Tag'字段的標籤值爲'0.5.2',該值有什麼錯誤?

因爲錯誤消息說:「附近.2'.At語法不正確

任何人都知道什麼是錯?

0.5.2 

[16:05:30][Step 5/5] g6a885b5 

[16:05:30][Step 5/5] Invoke-Sqlcmd : Incorrect syntax near '.2'.At 

[16:05:30][Step 5/5] C:\TeamCity\buildAgent\temp\buildTmp\powershell643608974404729980.ps1:12 char:1 

[16:05:30][Step 5/5] + invoke-sqlcmd -query "UPDATE VersionMetaData SET Tag = ${tag}, CommitId = 

[16:05:30][Step 5/5] ${comm ... 

回答

0

VersionmetaDataTag領域可能是一個字符串,但SQL Server嘗試的0.5.2類型轉換爲十進制數時,對其進行解析(因爲數據未格式化爲一個字符串時,它到達SQL Server)。而0.5.2不是十進制數字。

將標記包裹在單引號中告訴SQL Server它是一個字符串。

部分查詢(因爲我們沒有你的腳本的完整代碼):

invoke-sqlcmd -query "UPDATE VersionMetaData SET Tag = '${tag}' 

這將是更安全的這種方式不使用invoke-sqlcmd和字符串連接,因爲它讓你折斷開放/腐敗/通過SQL注入攻擊,但這意味着要對你的腳本的這部分進行大量重寫。 A PreparedStatement將是一個更安全的選擇。