【问题标题】:SQL DELETE appears to work but then does not implement changesSQL DELETE 似乎可以工作,但随后没有实现更改
【发布时间】:2014-02-26 18:46:43
【问题描述】:

我已经创建了一个卡片表,到目前为止包含 10 行。如果我执行:

delete from [Card] where cardnumber = 00010 //this card being held in the last row

我收到了结果消息(受影响的 1 行),我希望它可以工作,但是打开表格后我发现该行仍然存在。

接下来我在 SSMS 中使用 Edit Top 200 Rows 手动选择该行并将其删除,然后将其从表中删除,但是当我执行时,该行又回到了表中。

最后,我创建了一个存储过程,执行时返回成功,但更改仍未保留。

然而奇怪的是,我有一个 CardAmount 表,它与包含每张卡点数的 Card 表有关系,并且这些卡正在从 CardAmount 中删除。

我查看了this 的问题,但我认为这个问题没有得到解决。

【问题讨论】:

  • cardnumber字段是什么数据类型? = 00010 有点奇怪。
  • 另外 - 此表上是否有任何触发器可能会中断您的删除?
  • 第一个猜测是instead of delete 触发器忘记实际影响要执行删除的表。
  • 您使用的程序是否要求您提交更改(使其永久化)?
  • 您可以检查的事项: 1) 事务是否已提交? 2)有一个触发器而不是或重新创建行? 3)其他一些进程/bl正在重新创建该行(类似于“如果它不存在则插入它”)

标签: sql sql-server


【解决方案1】:

第一个猜测(结果证明是正确的)是一个 instead of delete 触发器,它忘记了实际影响它打算对其执行删除的表。

这是一个常见错误,特别是如果您正在实现某种影响深远的级联形式(并且不能只在外键约束上使用 ON DELETE CASCADE),您必须使用 INSTEAD OF 触发器但随后忽略在基础表上执行DELETE

【讨论】:

  • 这个问题是我的错误造成的,但这个答案对其他人有用。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 2015-03-03
  • 2018-04-30
  • 2021-11-25
  • 1970-01-01
  • 2020-01-31
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多