替代SSRS报告中的动态SQL查询

时间:2014-02-21 19:21:34

标签: sql-server reporting-services

我希望在应用程序中使用SSRS生成报告,并且发现使用SSRS报告中定义的SQL数据集非常严格。据我所知,我可以通过将SQL查询作为参数传递给报表并将数据集设置为使用该参数作为SQL查询来解决这个问题。我知道这种排序的动态SQL通常不受欢迎,但我需要看看我的选择是什么。

这里有一些背景,我的理由是我有一些非常复杂的查询,并且在我的PHP应用程序中,我有很多构造(连接,子查询等)被抽象出来,使得更容易制定查询,并且应用程序不同部分的可用子句。我可能在报表生成器中使用函数(仍然需要动态sql)实现相同的功能(但仍然需要复制PHP中已有的一些东西(请记住特定语言无关紧要),因为我需要一些在我的应用程序中的那些相同的SQL结构。我也不想使用存储过程,从过去的经验来看,我发现它们很难处理,一旦查询变得非常复杂并且你有很多不同的可能条件,它会变得很难看。存储过程中的动态SQL是调试的噩梦,除了使您失去使用存储过程的性能优势。

所以我很好奇的是将SQL字符串传递给报表的性能影响是什么,而不是将查询内联(考虑到我不会使用存储过程,无论如何)。它会以某种方式使查询更慢,还是相当于在PHP中执行查询?其次,与这种做法有关的其他问题/风险是什么?如果我在传递SQL之前对其进行清理,那么这样做会有其他主要的安全风险吗?第三,有没有其他选择我不会考虑会更好?

1 个答案:

答案 0 :(得分:1)

我主要看看sql注入问题。如果您可以传递查询,那么任何人都可以执行此操作。

为什么不真正使用存储过程,它被编译,即使动态sql不是最好的,也可能值得。

顺便提一下,你确定你的查询是如此复杂吗?这不是sql本身的问题吗?

您是否考虑过功能(当然还有动态)。

有很多解决方案,如果我使用ssrs传递我的查询的某些部分,它总是布尔值,没有sql注入的可能性