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

这个嵌套两层的sql语句为什么是无效的?
SQL code

selec * from (select top 20 * from (select top 100 * from Concentrator order by 序号 asc) order by 序号 desc) order by 序号 asc



这个的代码的基础设想是,先搜索表中前100行,然后把这100行倒序,得到第81-100行的数据,但是此时是逆排的,再把这个结果按升序排一次,结果提示这个语句是无效的

------解决方案--------------------
SQL code
select * from (select top 20 * from (select top 100 * from BS_EMPL order by SID asc) as a order by SID desc) as a order by SID asc

------解决方案--------------------
因为比如你执行select getdate()的时候,可以看到结果里面是没有别名的,那么当你把这个放到一个嵌套里面的时候,SQLServer就不知道怎么去调用这个东西了,SQLServer要找到一个明确的名字才能用。所以对select和嵌套的东西,显式添加别名是良好的编程规范,且可以减少很多不必要的错误。