截断带有一条记录的MS SQL Server Express表需要花费很长时间

截断带有一条记录的MS SQL Server Express表需要花费很长时间,sql,sql-server,truncate,Sql,Sql Server,Truncate,我正在Microsoft SQL Server Express 2017中设置一种测试数据库。我有一个包含10列的主表,它链接到其他6个表,即它的主键是其他6个表的外键 我用一条记录填充了这个主表 我需要截断它-即删除所有行,但不删除表。我尝试了truncate table和delete from两种方法,但这两种方法都需要很长时间:4分钟后,查询仍在执行!我知道有钥匙要检查等等,但这只是一张记录。其他的桌子都空了。这似乎不对。有什么想法可能是错误的,我能做些什么来修复它吗?具有外键约束的表不能

我正在Microsoft SQL Server Express 2017中设置一种测试数据库。我有一个包含10列的主表,它链接到其他6个表,即它的主键是其他6个表的外键

我用一条记录填充了这个主表


我需要截断它-即删除所有行,但不删除表。我尝试了
truncate table
delete from
两种方法,但这两种方法都需要很长时间:4分钟后,查询仍在执行!我知道有钥匙要检查等等,但这只是一张记录。其他的桌子都空了。这似乎不对。有什么想法可能是错误的,我能做些什么来修复它吗?

具有外键约束的表不能被截断。要么删除约束,截断表,然后重新创建约束,要么使用delete cascade。这是一个同样的例子


TRUNCATE TABLE是一个DDL命令,它无法检查表中的记录是否被子表中的记录引用。在删除的情况下,数据库能够确保它没有被其他记录引用。

作为对注释的响应

它可能是子表上的未提交事务


您将首先删除所有子记录,然后再删除父表记录。子表都是空的吗


这些表中是否有未提交的事务?如果确实如此,则尝试通过与dba联系来终止这些会话

您将首先删除所有子记录,然后再删除父表记录。子表都是空的吗?。您在这些表中是否有任何未提交的事务?您可以尝试关闭数据库并重新启动它。一种可能是一些锁坏了。我们需要更多。请发布您的表架构和正在执行的查询。您创建了哪些约束?是否有触发器?如果外键指向表
TRUNCATE
将不起作用;这要么意味着你没有像你所说的那样拥有它们,要么意味着你拥有它们并且
TRUNCATE
不起作用。如果是这种情况,那么您必须启用删除时的
级联
,这意味着
删除
可能需要一段时间。@GeorgeJoseph,我想我一定有未写入的事务。如果你把它作为答案贴出来,我会接受的。我重新启动了电脑,现在“truncate table_name”给了我一个错误,因为外键的缘故,它无法截断表。我不知道为什么它以前没有给出这个错误,而查询一直在运行。“从表中删除”现在可以正常工作。谢谢。我通过运行“DBCC opentran”,获取id,然后运行kill id,找到了未提交的事务。