确定无效的查询:ExecuteSqlCommand抛出:SqlException(0x80131904):错误的语法附近')'

问题描述:

我偶尔会收到一个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

你会得到一个无效的查询,如果jobsReady返回一个空列表...我扔在随机值查询......看空组在查询结束

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