![]() |
1
0
我的第一个建议是将两者之间的外键关系放在EntryID上。这将防止在不首先从工时表中删除所有实例的情况下从条目表中删除任何实例。 第二,有了外键,就必须从子级到父级(也就是从层次结构的底部开始)。这意味着我要先做这个:
|
![]() |
2
1
问题是,第二个查询只使用InHour,而没有引用EntryID。另外,第一个查询的条件彼此完全独立,如果您的工时表约束是正确的(当第二列不为null时,第一列永远不能为null),这可能不是问题,但是值得一看。
让我把你的查询重写为连接,也许它能帮助你找出问题所在。
我建议您在小时表上设置级联删除外键约束,以便从条目表中删除时,子小时行都会消失。这里仍然存在一些问题,因为每个EntryID可能有许多小时行,从语义上讲,您可能会多次尝试删除链接服务器上的同一行。
最后,如果您确实发现您的查询在链接上不必要地拉取了大量数据集(通过在远程matchine上运行queryprofiler来确定这一点,以查看提交的实际查询),那么策略性地使用CROSS-APPLY可以通过强制逐行处理来提供帮助,在链接服务器的情况下,这可能是一个错误 巨大的 |
![]() |
ybou · 需要帮助从SQL 2005查询中删除过时的=*连接运算符 7 年前 |
![]() |
Robert · 将多个分隔符分隔的字段视为不同的行 8 年前 |
![]() |
hud · 执行存储过程会导致错误 8 年前 |
![]() |
Gonzalo · 如何将存储过程的结果插入到新表中? 9 年前 |