我是软件开发人员而不是TSQL或DBA专家,只是背景知识。我的一个应用程序使用分配SQL视图进行报告,在此阶段(可能会更改)Windows应用程序执行视图,并在网格/表格中显示数据以进行报告。观点变得越来越复杂和缓慢,这是一个问题。我正在重新设计应用程序以使用Web前端进行报告。但我的问题是,如果我的报告基于存储过程或视图,那么在SQL方面报告的最佳方法是什么?关于SQL报告的任何其他意见或建议都欢迎,就像我提到的我是一名软件开发人员,我试图清除SQL工作,但这已经成为一个问题,我认为这是一个提高我的SQL知识的好时机。 / p>
感谢您的阅读。
答案 0 :(得分:5)
存储过程(SP)是比视图更好的选择,但是视图比嵌入在报表中的SQL查询要好得多。我知道你没有提到嵌入式SQL,但我将简要讨论它以给出更全面的答案。
当您在报表(或应用程序或数据库之外的任何内容)中嵌入SQL查询时,您假设所引用的所有对象都不会以任何方式更改。这首先是一个很大的假设(并且假设很糟糕),其次是对数据库所有者的严重限制 - 他们无法更改任何内容,因为它可能会破坏某些地方。
当您使用SP或视图访问数据库时,您可以合理地假设您正在调用的对象的名称(SP或视图)不会更改,并且任何参数集将保持不变或至少保持兼容。这两种方法都隐藏了来自调用者的查询逻辑 - 逻辑可以随着时间的推移得到纠正和改进,而不会影响调用者。只要暴露对象的名称(和任何参数)保持不变并且调用者永远不会知道,整个数据库就可以重构甚至重新分配。
在视图上使用SP的优点是您可以做得更多。例如,验证参数值是否在预期范围内是个好主意。如果您有一个特别复杂的查询,您可以使用临时表将其分解为更小的步骤。继续进行非常繁重的查询,您甚至可以在SP中执行临时维护步骤,例如更新统计信息。
我建议使用SP进行所有数据库访问。你现在可能不需要 ,但它将为你提供更多的空间来改变未来的事情如果你需要。