2009-10-13 122 views
1

我开发的数据库之一正在升级到SQL 2008(来自SQL 2000)。SQL Server 2008升级/编译 - 列别名和表别名

升级顾问正在标记一个我认为不是问题的问题。我希望有文件证明这是一个已知的问题,所以我的数据库团队会让它通过。

错误是说,在2008年SQL你不能使用表别名和列别名在一起。它还说,使用这些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 

在每个场景的别名创建匹配es实际的列名(通常不是我认同的好主意)。

然而,他们在编译SQL 2008(设置为10兼容级别)就好了。我认为升级顾问只是混淆,因为别名与列名相同。我同意在这里有一些“不太需要的代码”。但我不认为它需要改变升级到SQL 2008

越少的东西,我们可以改变这个升级意味着更少的东西来看看,如果当我们推出到生产的东西打破。

如果任何人的任何文件说这是一个已知的限制,那么请让我知道知道。

而且,如果我错了,这些都不是在2008年SQL某种程度上允许的(尽管它们编译就好了),那么我也想知道。

谢谢...

回答

1

从我最初在ORDER BY caluse只读列别名不能由表的别名为前缀,这将导致升级顾问抱怨。如果使用Profiler捕获工作负载的痕迹,UA可以分析跟踪文件并识别有问题的SQL,以便知道哪里/要修复哪些内容。

我也看到了,它似乎并不成为一个问题了,并可能是固定的,但是这并没有从我能找到证实MS。

希望这会有所帮助!

+0

但这些不是真正的列别名是他们?我想我不确定,因为他们是同一个名字。哪一个被使用? – Vaccano 2009-10-13 16:38:18

+0

没错,我不认为UA明白这一点。 – ajdams 2009-10-13 17:25:29