Sql server SQL Server是否删除FKC的订单?

Sql server SQL Server是否删除FKC的订单?,sql-server,tsql,Sql Server,Tsql,我有一个树表,它有self的外键(深度无限的父母和孩子)。鉴于SQL Server缺乏MySQL提供的级联(在同一个表中,循环)支持,我需要在删除ID之前先将其删除。我用CTE从最容易删除的(没有孩子)到最不容易删除的(最好的父母) 我想将这组ID抛出到DELETE中,但我需要按照发送给SQLServer的确切顺序删除它们。这可以在单个查询中完成吗 我可以编写一个存储过程来删除记录,也可以通过C#的多个查询一个接一个地删除记录。。。但我想知道这是否可以通过一个简单的从查询中的何处删除来实现?我不

我有一个树表,它有self的外键(深度无限的父母和孩子)。鉴于SQL Server缺乏MySQL提供的
级联
(在同一个表中,循环)支持,我需要在删除ID之前先将其删除。我用CTE从最容易删除的(没有孩子)到最不容易删除的(最好的父母)

我想将这组ID抛出到
DELETE
中,但我需要按照发送给SQLServer的确切顺序删除它们。这可以在单个查询中完成吗


我可以编写一个存储过程来删除记录,也可以通过C#的多个查询一个接一个地删除记录。。。但我想知道这是否可以通过一个简单的
查询中的何处删除来实现?我不知道
DELETE
是否保留了
在(…)
集合中的顺序,因为若它不。。。
FKC
将阻止它。-来自MySQL,从不在意它们可以在同一个表中级联。

我相信它会按照查询计划告诉它的顺序删除它们(但我可能错了),我不会指望字符串中的顺序。您可能需要批量递归删除子项,直到它们全部消失。约束在语句末尾检查,而不是在每行之后检查。因此,只要您可以在一条语句中全部删除它们,就没有问题。#根据MSDN文档:当TOP(n)子句与delete一起使用时,delete操作将在随机选择的n行上执行。如果必须使用TOP按有意义的时间顺序删除行,则必须在subselect语句中将TOP与order BY一起使用。对我来说,这表明顺序保留在
in
语句中。如果您想100%确定,您可以在自定义表表达式中添加类似top 100%的内容。@MartinSmith因此,只要约束检查完成时表中没有遗留依赖项,
中的
DELETE就可以工作?--好吧,把这条评论作为回答,贴上链接,我会接受的。