SQL Server TSQL调试 - 大规模视图 - 任何提示?

时间:2010-10-18 16:27:36

标签: sql sql-server tsql

我被要求调试一个生成拆分行的视图,它们应该分组。在尝试调试时,我正在尝试单独测试所有连接的子表。问题是,有很多依赖(总共11个连接),一旦你获得运行查询所需的所有依赖项,你基本上就有了原始的怪物查询。弄清楚查询的哪一部分导致问题是困难的。我真的不想重写它!

这真的很痛苦。来自经验丰富的DBA / SQL程序员的任何提示!?

3 个答案:

答案 0 :(得分:4)

通过逐个注释它们来查看连接,看看是否可以隔离到希望有一个连接。然后检查导致该问题的情况中的数据,以找出如何处理它。

答案 1 :(得分:0)

使用一些可视化工具和大查询;令人惊讶的是ms访问对于这样的任务并不坏,你可以

  • 具有所有联接和条件的直观表示
  • 通过轻松保存和重用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,并用这个奇怪的紫色标记连接表我偷了......呃......永久借用......从我上一份工作开始的。)

最后......前后映射。当业务需求不同时,很多时候会写这些旧查询。随着员工流失,随着时间的推移,开始和结束目标都会丢失,而且流程变得比目标更重要。确定用户使用此功能的步骤与实际修复此视图一样重要。