2009-10-13 115 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