由于许多原因(可扩展性、可维护性、可重用性),使用动态 SQL 手动构建查询可能会变得更糟,但在性能方面它仅受您自己的 SQL 查询编写能力的限制。这意味着在某些情况下它会比使用 Cognos 模型更快。使用动态 SQL 没有速度上的缺点。
话虽如此,如果您不利用该模型,您将错过 Cognos 的许多好处。动态 SQL 将严重削弱您保持一致性、在不重写报告的情况下进行广泛更改以及快速生成新报告的能力。
如果你的环境比较小,动态sql可能会满足你的需求。特别是对于使用与您的其他报告无关的表格和关系的奇怪的一次性报告。或者,如果您想以特定方式强制使用索引,则可以使用动态 sql 来实现。
编辑:重要的是要注意,在检索数据之前,在 Report Studio 过滤器中建立的条件不会传递到您的动态 SQL 查询中。对于大型数据集,这可能非常低效。为了将提示中的条件传递到动态 SQL,请使用 #prompt('yourPromptVariableNamehere')# 或 #promptmany('yourMultiSelectPromptVariablehere')#。经验法则是,在 cognos 之外运行您的 Dynamic SQL 查询并查看返回了多少数据。如果您有一个巨大的销售查询,至少需要在日期或分支上进行过滤,请在提示页面中放置一个 Prompt 以强制用户选择特定的日期/期间/日期范围/分支/等。到您的提示中,并使用 prompt/promptmany 语法将条件添加到您的动态 SQL 语句中。