关于 T-SQL 的几点小九九
2009-06-08 10:31:48 来源:WEB开发网您是否了解,一句使用了 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 的一些琐事
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接