【发布时间】:2013-08-31 16:07:39
【问题描述】:
我正在修复大约一年前设计的相当复杂的 SSRS 报告中的缺陷。据我所知,编写报告的人——我们组织的一名承包商,现在已经离开,无法回答问题——几年前学习了 SQL,但没有跟上它的最新状态——他的代码充满了过时和不好的做法,例如加入 WHERE 子句,按列号而不是列名排序,以及始终使用临时表而不是子查询或 CTE。作为 SQL 的新手(不到一年的经验),我总是试图弄清楚我遇到的一些奇怪编码的目的,并了解它使用的任何过时技术的历史。这是我无法弄清楚的一个 - 我目前正在使用的报告的存储过程在使用数据之前将所有内容选择到临时表中。如果编码人员需要三列、50 行查找表中的两列,他会首先将这两列选择到临时表中。即使对于最终的 SELECT,他总是先选择一个临时表,然后执行 SELECT * 来访问数据。我以前没见过这个,对我来说似乎毫无意义。为什么不直接访问数据?在 SQL 的历史中,是否存在或曾经存在这样做的任何目的,或者只是简单的糟糕编码?
【问题讨论】:
-
谢谢,戈登和普拉哈拉德。我没有考虑你建议的原因。我认为编码员对如何编码有某种误解。从他的其他一些代码来看,我想知道他在编写这份报告之前是否已经离开 SQL 一段时间了。我会投票支持你的两个答案,但我没有这样做所需的最低分数。
标签: sql tsql reporting-services temp-tables