我被要求调试一个生成拆分行的视图,它们应该分组。在尝试调试时,我正在尝试单独测试所有连接的子表。问题是,有很多依赖(总共11个连接),一旦你获得运行查询所需的所有依赖项,你基本上就有了原始的怪物查询。弄清楚查询的哪一部分导致问题是困难的。我真的不想重写它!
这真的很痛苦。来自经验丰富的DBA / SQL程序员的任何提示!?
答案 0 :(得分:4)
通过逐个注释它们来查看连接,看看是否可以隔离到希望有一个连接。然后检查导致该问题的情况中的数据,以找出如何处理它。
答案 1 :(得分:0)
使用一些可视化工具和大查询;令人惊讶的是ms访问对于这样的任务并不坏,你可以
答案 2 :(得分:0)
夫妻伎俩...
查找重复的键...任何查询都可以转换为子查询并从中进行选择。
select idcolumns,count(1) from
(put your entire query here as a subquery, 90+ lines is fine)
group by idcolumns
having count(1) > 1
如果你的'idcolumns'有任何重复的行,那么这个特别会显示。如果您遇到“拆分行”问题,更改“idcolumns”将允许您查看这些记录的拆分位置。你还可以包含一个where子句,这样你只需要查看原始查询中的一个小样本集......通过这个过程可以更容易地识别单个记录并使用它(正如布拉德在他的评论中所述)。 p>
如果这是某个GUI中的错误...先隔离并复制错误。这看起来更像是一个视图,因此它在这里可能无效,但如果你无法隔离并重复出错,则无法对其进行故障排除。
请参阅OMGPonies post ...删除连接中的所有表,然后逐个慢慢地引入表。对于您重新加入的每个联接,运行上面的计数查询并观察更改。
我有点抽屉......我建议找一块白板并画出每个关系...不要过分,但视觉参考对我有所帮助。颜色编码它很容易查看(我做黑色的表,红色的表名,蓝色的主键,绿色的FK,并用这个奇怪的紫色标记连接表我偷了......呃......永久借用......从我上一份工作开始的。)
最后......前后映射。当业务需求不同时,很多时候会写这些旧查询。随着员工流失,随着时间的推移,开始和结束目标都会丢失,而且流程变得比目标更重要。确定用户使用此功能的步骤与实际修复此视图一样重要。