本文可帮助你解决尝试在 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
语句以更新表中的行。
注意
如果收到“症状”部分中提到的第一条错误消息,可以单击“是”更新行。