日期:2014-05-17  浏览次数:20522 次

SQLSERVER 2000 升级 2005 ORDER BY 兼容性问题

ALTER DATABASE [MyDataBase]
SET COMPATIBILITY_LEVEL = 80;
GO
SELECT orderCol = 1, * FROM(select 1 myTable) SourceTable ORDER BY SourceTable.orderCol;
-- 可以通过

ALTER DATABASE [MyDataBase]
SET COMPATIBILITY_LEVEL = 90;
GO
SELECT orderCol = 1, * FROM(select 1 myTable) SourceTable ORDER BY SourceTable.orderCol;
-- 不可以通过

-- 求问不改兼容级别,不改代码,如何破?

------解决方案--------------------
ORDER BY orderCol
ordercol是自定义列名,不存在表集SourceTable中
什么都不改没法通过的吧
------解决方案--------------------
可能是2005之后有些旧写法不支持,比如*=这些,问题是(select 1 myTable)这个你这样写有什么意图?
------解决方案--------------------
引用:
Quote: 引用:

ORDER BY orderCol
ordercol是自定义列名,不存在表集SourceTable中
什么都不改没法通过的吧
兼容性问题,2000可以过


改成这样,倒是可以:


ALTER DATABASE ttt
SET COMPATIBILITY_LEVEL = 90;
GO

SELECT orderCol=1, * 
FROM(select 1 myTable) SourceTable 
ORDER BY orderCol;
/*
orderCol myTable
1 1
*/

------解决方案--------------------
建议修改代码,

SELECT * FROM
(SELECT orderCol=1,*
 FROM(select 1 myTable) SourceTable) SourceTable
ORDER BY SourceTable.orderCol