2017-08-29 66 views
-1

我偶爾會收到一個SQL異常,並且無法找到此代碼導致無效MS SQL語句的任何方式。確定無效的查詢:ExecuteSqlCommand拋出:SqlException(0x80131904):錯誤的語法附近')'

jobsReady是IQueryable的< int>的

if (jobsReady.Count() > 0 && max > 0) 
    return this.Database.ExecuteSqlCommand("UPDATE TOP(" + max + ") Jobs SET ServerID=" + serverID + ",[email protected] WHERE ServerID IS NULL AND JobID IN (" + string.Join(", ", jobsReady) + ")", 
    new SqlParameter("@UpdateTime", System.Data.SqlDbType.DateTime, 8, global::System.Data.ParameterDirection.Input, 0, 0, "UpdateTime", global::System.Data.DataRowVersion.Current, false, DateTime.Now, "", "", "")); 
return 0; 

有時會拋出:

發生錯誤在Timer_Elapsed: System.Data.SqlClient.SqlException(0x80131904):不正確的語法附近 ')'。

+0

什麼是生成的**實際**查詢? – Amy

+0

將單條語句分成幾行。在調用'ExecuteSqlCommand'之前,使用本地字符串變量,分配命令字符串並詳細查看此字符串。你可以使用調試器,'Console.WriteLine()','MessageBox.Show()'或任何日誌機制。您確定變量'max'和'jobsReady'總是包含不會導致語法錯誤的值? – MarkusEgle

+0

好主意,最大值是一個整數,jobsReady是一個IQueryable 因此總是整數 – Prometheus

回答

0

你會得到一個無效的查詢,如果jobsReady返回一個空列表...我扔在隨機值查詢......看空組在查詢結束

UPDATE TOP(100) Jobs SET ServerID=100,UpdateTime='2010-01-01' WHERE ServerID IS NULL AND JobID IN() 
相關問題