【发布时间】:2021-03-09 05:42:40
【问题描述】:
我必须在测试环境中截断三个不同测试数据库的所有表。我需要考虑表约束的 sql 查询,因为我在 AdventureWorks 数据库上测试的所有代码都引发了以下错误:
无法截断表“Person.CountryRegion”,因为它被对象“vStateProvinceCountryRegion”引用
【问题讨论】:
-
错误告诉你问题所在。如果它们被其他对象使用,则不能
TRUNCATE表;如果你“必须”TRUNCATE一切,你必须DROP阻塞对象然后重新创建它们。老实说,听起来像XY Problem。 -
我尝试了以下代码gist.github.com/danguilherme/04fbe3906b46844f9351,但我无法手动列出表名。是否有截断给定数据库名称上的所有表的代码?就我而言,三个测试数据库有数百个表
-
正如我所提到的,当存在约束和模式绑定时,您不能盲目地
TRUNCATE表。您必须先DROP,然后再重新创建。这不是一项微不足道的任务。我个人建议从您的源代码控制/数据库项目重新部署您的数据库,因为其中不包含任何数据(除了应用程序工作可能必需的任何数据)。 -
感谢您的回答,可惜我没有数据库项目或创建脚本
-
那么你需要
DROP阻塞对象TRUNCATE,然后在TRUNCATE完成后重新CREATE你DROPed的对象。这将是一项非常手动的任务。
标签: sql-server truncate