这适用于MS SQL 2005服务器.我有一个查询删除表中的所有孤立记录.但是,此表具有自引用FK.我也需要删除这些,但目前还不清楚如何这样做.当前脚本删除所有未在其他表中显示为FK的记录,但我没有考虑自己的表中的自引用FK.表很简单:
PK, FK, DAta
1, NULL, jibberjab
2, 1, jibberjab2
3, 1, skdfasfa
最佳答案 如果要有多个级别,可以使用公用表表达式来获取需要删除的ID,并在一个语句中处理孤立及其所有后代:
WITH cte AS (
SELECT pk
FROM myTable
WHERE id = 1 --pk to delete
UNION ALL
SELECT t.pk
FROM myTable t
JOIN cte c
ON t.fk = c.pk
)
DELETE t
FROM cte c
JOIN myTable t
ON c.pk = t.pk