【问题标题】:sql delete row errorsql删除行错误
【发布时间】:2015-12-17 21:12:00
【问题描述】:

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

sql error

没有删除任何行

尝试删除第 2 行时出现问题错误源: Microsoft.SqlServer.Management.DataTools 错误消息:该行 更新或删除的值不会使行唯一,或者它们 改变多行(2行)

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

【问题讨论】:

  • 我在使用 SS MS GUI 时运气不佳。我建议只在查询窗口编辑器中使用 T-SQL。对我来说总是工作得更好。
  • 遵循这里的指南allenbuckley.com/blog/… 只是您没有主键和重复数据。

标签: sql-server ssms


【解决方案1】:

感谢@Hani

我遇到了同样的问题(实际上是一个具有唯一 ID 的表,但有些行意外重复,包括“唯一 ID”,所以我无法删除重复的行),您的建议帮助我从 SQL 解决了它服务器管理 GUI。

  1. 我使用 GUI 界面在表格中“编辑前 200 行”。
  2. 然后我在 SQL Criteria 窗格中添加了一个过滤器,它只显示了我的两个重复行。 (这是我无法从中删除其中一行的原因)。
  3. 受您评论的启发,我打开了 SQL 窗格并更改了:

SELECT TOP(200)...{snip my criteria created by filter}

改为阅读:

SELECT TOP(1)...{snip my criteria created by filter}

  1. 然后我能够“执行 SQL”调整后的 SQL。
  2. 然后我可以使用界面删除显示的单行(这次没有警告)。
  3. 重新运行包含 200 行的 SQL Criteria 确认仅成功删除了一行,还剩下一行。

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

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

【讨论】:

    【解决方案2】:

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

    SQL Server 无法删除您的行,因为没有将它与其他行区分开来。

    解决方案是为您的表添加一个唯一的主键。无论如何不建议没有。一个简单的integer 和autoincrement 应该对您透明地工作。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        我还发现,如果您使用 text 或 ntext 列,您将收到他的错误。我将该列转换为 NVARCHAR(MAX) 并且从那以后没有任何问题。

        【讨论】:

          猜你喜欢
          • 2018-08-15
          • 2020-08-23
          • 2017-05-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多