【问题标题】:ERROR [42000] [Microsoft][SQL Native Client][SQL Server]Incorrect syntax near the keyword 'SET'错误 [42000] [Microsoft][SQL Native Client][SQL Server]关键字“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: :( 我认为你是对的。似乎不需要装饰......

标签: sql sql-server


【解决方案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 语句而不是使用参数化查询,因此您的字符串可能需要引号?

我还没有机会对此进行测试,但建议您快速尝试一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2016-07-08
    • 2020-02-26
    • 1970-01-01
    • 2021-06-03
    • 2020-12-18
    相关资源
    最近更新 更多