【问题标题】:SQL Reporting Use stored proc or query/viewSQL 报告 使用存储过程或查询/视图
【发布时间】:2015-03-05 06:49:57
【问题描述】:

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

感谢您的阅读。

【问题讨论】:

  • 我认为存储过程会是更好的方法..

标签: sql sql-server tsql reporting-services


【解决方案1】:

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

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

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

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

我建议对所有数据库访问使用 SP。你现在可能不需要,但它会给你更多的空间来改变未来如果你需要。

【讨论】:

  • 感谢@Rhys Jones 的解释。我认为我们最大的问题之一是缺乏知识,如果我查看它们都是用视图设计器设计的视图,我知道有很多 TSQL 无法在视图设计器中打开/运行。我看着它并告诉自己作为开发人员我在 VS 中使用设计器吗?我一直更喜欢通过类来编写我的对象、模型和结构代码,而不是使用 VS 设计器来创建代码分配,但也会阻止你做某些事情。我已经看到了一些非常好的结构和聪明的 TSQL,“手写” tsql。
  • “当您将 SQL 查询嵌入到报表(或应用程序或数据库之外的任何内容)中时,您假设所有引用的对象都不会以任何方式发生变化。” - 为什么?我永远不会做出这样的假设。我不明白为什么这很重要。如果有数据库更改,您可能需要更改存储过程作为嵌入式 SQL。不同之处在于,如果报告需要更改,如果它是嵌入的,您可以在一个地方完成所有操作。如果它是存储过程,则必须更新报告和存储过程。而且您必须确保它们始终保持同步(更多的错误空间)
猜你喜欢
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多