尝试使用 SQL Server Management Studio 更新 SQL Server 中的表行时,可能会收到错误消息

本文可帮助你解决尝试在 SQL Server 中使用 SQL Server Management Studio 更新表时发生的问题。

原始产品版本:SQL Server
原始 KB 数: 925719

现象

请考虑以下场景。 尝试使用 SQL Server Management Studio 更新Microsoft SQL Server 中的表。 在对象资源管理器中,右键单击表的名称,然后单击“打开表”。 更新表的行。 在此方案中,可能会在Microsoft SQL Server Management Studio 对话框中意外收到以下错误消息之一:

  • 错误消息 1

    自上次检索“结果”窗格以来,数据已更改。 是否立即保存更改?

    (乐观并发控制错误)

    单击“是”将更改提交到数据库。

    单击“否”可放弃更改并检索此行的当前数据。

    单击“取消”继续编辑。

    注意

    如果在此错误消息对话框中单击“是,则行已正确更新。

  • 错误消息 2

    未更新行。

    第 X中的数据未提交。

    错误源:Microsoft.VisualStudio.DataTools。

    错误消息:已更新或删除的行值要么不使行唯一,要么更改多行(N 行)。

    更正错误,然后重试或按 ESC 取消更改。

    注意

    如果收到此消息对话框,则无法更新该行。

如果满足以下条件,则会出现此问题:

  • 该表包含文本或 ntext 数据类型的一个或多个列。

  • 下列列之一的值包含以下字符:

    • 百分号 (%)
    • 下划线 (_)
    • 左括号 ([)
  • 该表不包含主键。

注意

尝试在 Microsoft Visual Studio 中使用表设计器来更新 SQL Server 数据库中的表时,也会出现此问题。

原因

出现此问题的原因是 SQL Server Management Studio 为更新操作生成了不正确的 SQL 语句。 如果表不包含主键,则所有列的值用于标识要更新的行。 当 SQL Server Management Studio 构造此语句时,错误比较运算符 (=) 用于比较文本、ntext 或图像数据类型的列。

解决方法

若要解决此问题,请在 SQL Server Management Studio 中创建新的查询窗口。 然后,运行 SQL UPDATE 语句以更新表中的行。

注意

如果收到“症状”部分中提到的第一条错误消息,可以单击“是更新行。

参考

UPDATE (Transact-SQL)