SQL报告使用存储过程或查询/视图

Fra*_*ard 1 sql t-sql sql-server reporting-services

我是一名软件开发人员,而不是TSQL或DBA专家,只是背景知识.我的一个应用程序使用分配SQL视图进行报告,在此阶段(可能会更改)Windows应用程序执行视图,并在网格/表格中显示数据以进行报告.观点变得越来越复杂和缓慢,这是一个问题.我正在重新设计应用程序以使用Web前端进行报告.但我的问题是,如果我的报告基于存储过程或视图,那么在SQL方面报告的最佳方法是什么?关于SQL报告的任何其他意见或建议都欢迎,就像我提到的我是一名软件开发人员,我试图清除SQL工作,但这已经成为一个问题,我认为这是一个提高我的SQL知识的好时机.

谢谢你的阅读.

Rhy*_*nes 5

存储过程(SP)是比视图更好的选择,但是视图比嵌入在报表中的SQL查询要好得多.我知道你没有提到嵌入式SQL,但我将简要讨论它以给出更全面的答案.

当您在报表(或应用程序或数据库之外的任何内容)中嵌入SQL查询时,您假设所引用的所有对象都不会以任何方式更改.这首先是一个很大的假设(并且假设很糟糕),其次是对数据库所有者的严重限制 - 他们不能改变任何东西,因为它可能会破坏某些地方.

当您使用SP或视图访问数据库时,您可以合理地假设您正在调用的对象的名称(SP或视图)不会更改,并且任何参数集将保持不变或至少保持兼容.这两种方法都隐藏了来自调用者的查询逻辑 - 逻辑可以随着时间的推移得到纠正和改进,而不会影响调用者.只要暴露对象的名称(和任何参数)保持不变并且调用者永远不会知道,整个数据库就可以重构甚至重新分配.

在视图上使用SP的优点是您可以做得更多.例如,验证参数值是否在预期范围内是个好主意.如果您有一个特别复杂的查询,您可以使用临时表将其分解为更小的步骤.继续进行非常繁重的查询,您甚至可以在SP中执行临时维护步骤,例如更新统计信息.

我建议使用SP进行所有数据库访问.您可能没有需要到现在,但它会给你更多的范围,在未来改变的事情,如果你需要.