我开发的一个数据库正在升级到SQL 2008(来自SQL 2000)。
升级顾问正在标记一个我认为不是问题的问题。我希望有文档证明这是一个已知问题,这样我的数据库团队就会让它通过。
错误在于,在SQL 2008中,您不能同时使用表别名和列别名。它还说使用这些的sprocs不会编译。
以下是导致此问题的不同SQL方案:
select
case
when tblOneAlias.COLUMN_NAME is null then tblTwoAlias.COLUMN_NAME
else tblOneAlias.COLUMN_NAME
end as COLUMN_NAME
from tblOne tblOneAlias
join tblTwo tblTwoAlias
on tblOneAlias.JOIN_VALUE = tblTwoAlias.JOIN_VALUE
order by tblOneAlias.COLUMN_NAME, tblTwoAlias.COLUMN_NAME
select tblAlias.COLUMN_NAME as 'COLUMN_NAME'
from tblName tblAlias
order by tblAlias.COLUMN_NAME
select COLUMN_NAME = tblAlias.COLUMN_NAME
from tblName tblAlias
order by tblAlias.COLUMN_NAME
在每个场景中都会创建一个与实际列名匹配的别名(通常不是我同意的好主意)。
但是,它们在SQL 2008中编译得很好(兼容级别设置为10)。我认为升级顾问很困惑,因为别名与列名相同。我同意这里有一些“不太可取的代码”。但我不认为需要更改才能升级到SQL 2008.
这次升级我们可以改变的事情越少意味着当我们开始投入生产时,如果出现问题,需要考虑的事情就越少。
如果有人知道任何文件说这是一个已知的限制,那么请告诉我。
另外,如果我错了,并且SQL 2008中不允许这些(尽管它们编译得很好),那么我也想知道它。
...谢谢
答案 0 :(得分:1)
从我最初阅读的内容来看,ORDER BY caluse中的列别名不能以表别名作为前缀,这会导致升级顾问抱怨。如果使用Profiler捕获工作负载的跟踪,UA可以分析跟踪文件并识别有问题的SQL,以便您知道修复的位置/内容。
我还读到它似乎不再是一个问题,并且可能已经修复,但MS没有通过我能找到的证实这一点。
希望这有帮助!