WEB开发网
开发学院数据库MSSQL Server 关于 T-SQL 的几点小九九 阅读

关于 T-SQL 的几点小九九

 2009-06-08 10:31:48 来源:WEB开发网   
核心提示: 您是否了解,一句使用了 ORDER BY 子句的标准查询,关于 T-SQL 的几点小九九(4),如:SELECT IT_ID, Title FROM reglogin.dbo.InfoTable ORDER BY IT_ID DESC 返回的并非是一张如您所愿的表,而是返回的一个游标,却也

您是否了解,一句使用了 ORDER BY 子句的标准查询,如:SELECT IT_ID, Title FROM reglogin.dbo.InfoTable ORDER BY IT_ID DESC 返回的并非是一张如您所愿的表,而是返回的一个游标。我们来看看什么是游标?SQL 是基于集合理论的,集合不会预先对它的行进行排序,它只是成员的逻辑集合,成员的顺序无关紧要,对表进行排序的查询可以返回一个对象,包含按照特定物理顺序组织的行,ANSI 把这种对象称为游标。

正因为使用了 ORDER BY 子句的查询返回的是游标,从而使其不能用作表表达式(即:试图、内联表值函数、子查询、派生表等),那么当您在 SQL Server 中运行如下派生表查询时会产生错误:

  SELECT *
      FROM (SELECT IT_ID, Title
            FROM reglogin.dbo.InfoTable
            ORDER BY IT_ID DESC) AS newTable;

您是否已经猜到,比较两个 T-SQL 语句的差别,您应该可以得到这样一个结论:SQL Server 允许您在“表表达式”中使用 TOP 查询。实际上只有指定了 TOP 选项,才能在“表表达式”中使用带有 ORDER BY 子句的查询。换句话说,同时指定了 TOP 子句和 ORDER BY 子句的查询可以返回一个关系结果,而非游标。具有讽刺意味的是,使用了非标准不属于关系范畴的 TOP 选项后,本来应该返回游标的查询却返回一个关系结果。正因为如此,对这些非标准非关系特性的支持运行程序员以一种非常荒唐的方式利用它们,而事实上根本不应该支持这些方法。

对此您是否有所触动呢?我们曾经如此做过,却也无碍,但是这样是否正确呢?聪明的你,或许有答案了。

3. 关于 NULL 的一些琐事

上一页  1 2 3 4 5 6 7 8  下一页

Tags:关于 SQL 小九九

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接