SQL Server 2008升级/编译 - 列别名和表别名

时间:2009-10-13 16:10:16

标签: sql-server-2008 upgrade

我开发的一个数据库正在升级到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中不允许这些(尽管它们编译得很好),那么我也想知道它。

...谢谢

1 个答案:

答案 0 :(得分:1)

从我最初阅读的内容来看,ORDER BY caluse中的列别名不能以表别名作为前缀,这会导致升级顾问抱怨。如果使用Profiler捕获工作负载的跟踪,UA可以分析跟踪文件并识别有问题的SQL,以便您知道修复的位置/内容。

我还读到它似乎不再是一个问题,并且可能已经修复,但MS没有通过我能找到的证实这一点。

希望这有帮助!