E.R*_*nim 2 sql-server sql-server-2008-r2 truncate
嗨,我试图从我的数据库中截断一些表,但它们与外键约束相关,所以每次我尝试 SQL Server 时都会抛出这样的错误:
无法截断表“Table”,因为它正被 FOREIGN KEY 约束引用
我不想删除表或删除它们。
一位朋友告诉了这个案例的Truncate Cascade,但我没有找到任何相关信息,其他用户也告诉我试试这个;我确实尝试过,但仍然没有截断我的表。
我还阅读了有关外键 DROP 和 RE-CREATE 的 SCRIPT 以与 TRUNCATE 一起使用。
脚本应该会影响我的数据库,或者至少我是这么认为的。但是在运行它之后,我无法截断我的表并且它抛出了同样的错误。我正在使用 SQL Server 2008 R2,并使用该版本的 SSMS 运行我的查询。
您不能截断具有外键约束的表。我会编写您的 truncate 语句来删除约束,然后截断表,然后重新创建约束。
因为 TRUNCATE TABLE 是一个 DDL 命令,它不能检查表中的记录是否被子表中的记录引用。
这就是 DELETE 有效而 TRUNCATE TABLE 无效的原因:因为数据库能够确保它没有被另一条记录引用。
根据您对截断级联的引用,有一个基于约束的删除级联或更新。这与截断不同。这是一个包含有关此信息的链接。
关于您的链接,它所做的只是运行一个脚本,该脚本创建您可以复制和粘贴的语句,然后在您的数据库上运行。如果您希望它通过截断变得更加自动化;您需要找到一种方法来存储 create 语句,运行 drop 约束语句,截断您的表,然后拉回并运行 create 语句。
如果必须自动化,动态 SQL 可能是您最好的选择。如果是这种情况,我会研究另一种解决方案。也许分区交换或其他什么,但我们需要更多的信息来挖掘自动化最佳实践过程的其他建议。