SQL删除行错误

6

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

sql 错误

没有删除任何行

尝试删除第2行时出现问题。错误来源:Microsoft.SqlServer.Management.DataTools。错误信息:更新或删除的行值不足以使行唯一,或者会修改多个行(共2行)。

有没有不需要键入任何查询就可以解决这个错误的方法?


1
我从来没有在 SS MS GUI 上运气好过。我建议只使用查询窗口编辑器中的 T-SQL。对我来说总是更有效。 - Dan Forbes
1
按照这里的指南进行操作:http://allenbuckley.com/blog/the-row-values-updated-or-deleted-either-do-not-make-the-row-unique-or-they-alter-multiple-rows/。简而言之,您没有主键并且存在重复数据。 - Teoman shipahi
4个回答

7

感谢@Hani的帮助。

我遇到了同样的问题(实际上是一个带有唯一ID的表格,但是有些行被意外重复了,包括“唯一ID”,因此我无法删除重复行),你的建议帮助我从SQL Server Management GUI中解决了这个问题。

  1. 我使用了GUI界面来“编辑表格中的前200行”。
  2. 然后我在SQL条件窗格中添加了一个筛选器,只显示了我的两个重复行。(这就是我无法删除其中一个行的地方)。
  3. 受到您的评论启发,我打开了SQL窗格并更改了:

SELECT TOP(200)...{剪切我的筛选条件所创建的内容}

改为:

SELECT TOP(1)...{剪切我的筛选条件所创建的内容}

  1. 然后我可以执行修改过的SQL。
  2. 然后我可以使用界面删除显示的单行(这次没有警告)。
  3. 重新运行带有200行的SQL条件确认只成功删除了一行,还剩下一行。

感谢您的帮助,这对我来说是GUI和SQL代码的完美结合,使我能够安全高效地完成工作。

希望这可以帮助其他处于类似情况的人。


6

您的表中没有主键或唯一键。

SQL Server 无法删除此行,因为无法将其与其他行区分开来。

解决方法是向表中添加一个唯一的主键。无论如何都不建议没有主键。一个简单的 integer 类型的列加上 autoincrement 属性应该能够透明地为您工作。


4

如果您正在尝试删除表中没有唯一标识符的重复行,可以尝试以下方法。

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

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


2

我还发现,如果您有一个textntext列,那么您将会遇到这个错误。我将该列转换为NVARCHAR(MAX)后,此问题就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接