sql 删除行错误

sql delete row error

我正在尝试删除 sql server management studio 2012 中的一行,但出现错误:

sql error

No rows were deleted

A problem occurred attempting to delete row 2 Error Source: Microsoft.SqlServer.Management.DataTools Error Message: The row value(s) updated or deleted either do not make the row unique or they alter multiple rows(2 rows)

有没有办法在不输入任何查询的情况下修复错误?

您的 table 中没有唯一主键。

SQL 服务器无法删除您的行,因为没有任何东西可以将它与其他行区分开来。

解决方案是为您的 table 添加一个唯一的主键。反正不建议有none。一个简单的 integerautoincrement 应该对你透明地工作。

如果您尝试删除 table 中没有唯一标识符的重复行之一,您可以尝试类似的操作。

DELETE TOP(1) FROM theTable WHERE condition1, condition2,...

在应用删除查询之前,您应该先使用 SELECT 语句对其进行测试。

感谢@Hani

我遇到了同样的问题(实际上 table 具有唯一 ID,但有些行不小心重复了,包括 "unique ID" 所以我无法删除重复的行),你的建议帮助我从 SQL 服务器管理 GUI 解决了它。

  1. 我在 table 中使用了 "edit top 200 rows" 的 GUI 界面。
  2. 然后我在 SQL 条件窗格中添加了一个过滤器,它只显示了我的两个重复行。 (这是我无法从中删除其中一行的情况)。
  3. 受您评论的启发,我打开了 SQL 窗格并更改了:

SELECT TOP(200)...{删掉我通过过滤器创建的条件}

改为阅读:

SELECT TOP(1)...{删掉我通过过滤器创建的条件}

  1. 然后我能够 "Execute SQL" 调整后的 SQL。
  2. 然后我可以使用界面删除显示的单行(这次没有警告)。
  3. 重新运行 SQL 200 行的条件确认只有一行已成功删除,剩下一行。

感谢您的帮助,事实证明这是 GUI 和 SQL 代码的完美结合,让我能够安全高效地完成工作。

我希望这对处于类似情况的其他人有所帮助。

我还发现,如果您使用 textntext 列,您将得到他的错误。我将该列转换为 NVARCHAR(MAX),此后没有遇到任何问题。