错误 [42000] [Microsoft][SQL Native Client][SQL Server]关键字“SET”附近的语法不正确
Posted
技术标签:
【中文标题】错误 [42000] [Microsoft][SQL Native Client][SQL Server]关键字“SET”附近的语法不正确【英文标题】:ERROR [42000] [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near the keyword 'SET' 【发布时间】:2011-08-10 13:40:45 【问题描述】:我们使用 SQL 2005 Express 进行存储。
我正在使用 ODBCCommand 更新表中的一些值,但出现以下错误。表包含所有有效列。
错误 [42000] [Microsoft][SQL Native Client][SQL Server] 关键字“SET”附近的语法不正确。所以请让我知道它有什么问题,查询在 SQL 浏览器中工作正常。
我的代码:
cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=?", conn);
cmd.Parameters.Add("@SubscriptionCancelled", OdbcType.VarChar, 255).Value = "Subscription Cancelled on " + DateTime.Now;
cmd.Parameters.Add("@SubscriptionID", OdbcType.VarChar, 255).Value = sSubscriptionID;
【问题讨论】:
你的 ODBCCommand 对象的 CommandType 是什么? 你为什么使用 OdbcCommand 而不是 SqlCommand? 我想指出,对我来说似乎没有必要将“Subscription Canceled on”作为存储在 SubscriptionCanceled 列中的数据的一部分。如果该列已被称为 SubscriptionCancelled (该名称已经有含义),我会将其设为 datetime 列并仅存储日期;否则,将来您将很难在该表中查询取消订阅的日期。只是一个建议。 @mitch - 我取消删除以便他可以测试,但我不确定。我检查了 msdn 信息,在一个示例中我发现它们没有分隔。但是他们也没有连接字符串 @JNK: :( 我认为你是对的。似乎不需要装饰...... 【参考方案1】:我之前没有使用过 ODBCcommand,但我猜你需要在命令语句中用单引号分隔你的字符串。
尝试更改为:
cmd = new OdbcCommand("UPDATE Transaction_Details SET SubscriptionCancelled='?' WHERE SubscriptionID='?'", conn);
【讨论】:
我很确定这是正确的答案,因为您尝试更新的列是 varchar,并且在普通 T-SQL 中需要用单引号括起来。【参考方案2】:改变
UPDATE Transaction_Details SET SubscriptionCancelled=? WHERE SubscriptionID=?
到
UPDATE Transaction_Details SET SubscriptionCancelled=@SubscriptionCancelled WHERE SubscriptionID=@SubscriptionID
【讨论】:
这就是我最初的想法,但你不需要。它在参数“?”中替换订购... 顺便说一句:伙计们,如果您使用 SSMS 并且尚未下载 Mladen Prajdic 的 SSMS 工具包,我强烈建议您这样做。它非常非常有用....【参考方案3】:鉴于 SQL 不知道参数的类型,因为您正在构建 T-SQL 语句而不是使用参数化查询,因此您的字符串可能需要引号?
我还没有机会对此进行测试,但建议您快速尝试一下。
【讨论】:
以上是关于错误 [42000] [Microsoft][SQL Native Client][SQL Server]关键字“SET”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章
PYODBC ProgrammingError: ('42000', "[42000] [Microsoft][Pilote ODBC Microsoft Access]
OLE DB 错误:OLE DB 或 ODBC 错误:关键字“JOIN”附近的语法不正确。; 42000
MySQL:错误 1142 (42000) 和错误 1064 (42000)
我该如何解决这个错误,SQLSTATE [42000]? [复制]