用一条记录截断 MS SQL Server Express table 需要很长时间
Truncating a MS SQL Server Express table with one record takes forever
我正在 Microsoft SQL Server Express 2017 中设置一种测试数据库。我有一个主 table 有 10 列,链接到其他 6 列,即它的主键是其他 6 个 table 的外键。
我只用一条记录填充了这个主table。
我需要截断它 - 即删除所有行但不删除 table。我尝试了 truncate table
和 delete from
,但都花了很长时间:4 分钟后查询仍在执行!我知道有一些钥匙可以检查等,但它只是一个记录。所有其他 table 都是空的。这似乎不对。有什么想法可能是错误的吗?我可以做些什么来解决它?
具有外键约束的 table 不能被截断。要么删除约束,截断 table 然后重新创建约束,要么使用 delete cascade。这是相同的 link。
TRUNCATE TABLE 是一个 DDL 命令,它无法检查 table 中的记录是否被子 table 中的记录引用。在删除的情况下,数据库能够确保它没有被另一条记录引用。
回复评论
这可能是未提交的事务,在您的 child table 上。
您将首先删除所有 child 记录,然后再删除 parent table 记录。 child table 都是空的吗?
您在这些 table 中是否有任何未提交的交易?如果这样做,则尝试通过聘请 dba 来终止这些会话。
我正在 Microsoft SQL Server Express 2017 中设置一种测试数据库。我有一个主 table 有 10 列,链接到其他 6 列,即它的主键是其他 6 个 table 的外键。
我只用一条记录填充了这个主table。
我需要截断它 - 即删除所有行但不删除 table。我尝试了 truncate table
和 delete from
,但都花了很长时间:4 分钟后查询仍在执行!我知道有一些钥匙可以检查等,但它只是一个记录。所有其他 table 都是空的。这似乎不对。有什么想法可能是错误的吗?我可以做些什么来解决它?
具有外键约束的 table 不能被截断。要么删除约束,截断 table 然后重新创建约束,要么使用 delete cascade。这是相同的 link。
TRUNCATE TABLE 是一个 DDL 命令,它无法检查 table 中的记录是否被子 table 中的记录引用。在删除的情况下,数据库能够确保它没有被另一条记录引用。
回复评论
这可能是未提交的事务,在您的 child table 上。
您将首先删除所有 child 记录,然后再删除 parent table 记录。 child table 都是空的吗?
您在这些 table 中是否有任何未提交的交易?如果这样做,则尝试通过聘请 dba 来终止这些会话。