【问题标题】:Cannot truncate a referenced table无法截断引用的表
【发布时间】:2017-01-26 10:56:44
【问题描述】:

目前我正在开发一个数据库项目,并且我会定期更新数据库。我的问题是即使没有表引用它,我也无法截断表。也就是说,我们假设表 y 和表 z 依赖于表 x 中的一个字段。我可以截断表 y 和表 z,但不能截断表 x,即使表 y 和表 z 为空。我正在使用 SQL Server。您能否让我理解为什么会发生这种情况并提供解决方案?谢谢。 (我用谷歌搜索但找不到解决方案。)

编辑: 我还要声明,即使我清空了表 x(使用从表 x 中删除),我仍然不能截断它。

【问题讨论】:

  • 你的错误信息是什么?
  • @esperento57 错误消息是“无法截断表 'x',因为它被外键约束引用。”
  • 实际上数据库管理员可以使用外键来保护 Truncate Table 命令免受数据丢失:kodyaz.com/t-sql/…

标签: sql-server truncate


【解决方案1】:

这是设计使然。

如果你想截断表格然后

  1. 首先,您需要删除引用您的 foreign key 约束 截断表
  2. 运行truncate 命令
  3. 重新创建foreign key 约束

【讨论】:

  • 这个@prdp 背后的逻辑是什么?即使所有表格都是空的,为什么我不能截断表格?
  • @tempx - Truncate 是一个DDL 命令,与delete 不同,它无法验证子表中存在的数据。这就是我受教育的方式;)可能还有其他一些原因
  • 如果你使用“删除”而不是“截断”?
  • @Prdp 我可以理解数据验证。但是,子表为空,父表为空但我不能截断父表!怎么来的?顺便谢谢。
  • @Esperento57 是的,我可以从表中删除数据但不能截断!
猜你喜欢
  • 2019-11-30
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多