问题的出现 用ACCESS数据库进行查询的时候出现了这样一个问题,select top 10 * from table order by column1 desc,结果出来了不止10条数据,感觉非常奇怪。在网上搜索了之后发现原来ACCESS是JET-SQL,而并非T-SQL。因此原因就找到了,就是因为table中的column1字段的值都是一样的,而JET-SQL不能识别。 问题的解决 问题原因找到了当然容易解决了,办法有很多,最简单的在table中增加一个自动增长字段SEQ,然后排序的时候按照这个排序就行。但是这个不是最好的办法,我建议还是通过table中的组合排序解决,比如按照Unique Index来排序等等。 深入了解 问题虽然解决了,但是咱们不能哭了半天不知道谁死了吧。还是要弄明白何谓JET-SQL,并且还要弄明白与T-SQL的区别。 SQL 是结构化查询语言的缩写,是一种标准。现在一般将标准的 SQL 语言规范称为 ANSI SQL XX,后面的 XX 表示版本,比如 ANSI SQL 92 规范。很多公司的数据库软件都使用 SQL 语句来进行数据库操作,但是各大公司都对标准的 SQL 语言规范进行了扩展,因此 SQL 很多分支,各种分支都有其特殊且与其他分支不兼容的地方。 JET SQL 与 T-SQL 都是微软所特有的 SQL 分支,JET SQL 用于 access 数据库软件,T-SQL 用于 SQL SERVER 数据库软件。 JET-SQL与T-SQL的主要区别 1、JET SQL 对日期的撰写两边用 # 号,T-SQL 用 ' 号 2、多层套嵌时 JET SQL 必须将 SELECT 子句用括号 ( ) 一层一层包含起来,而 T-SQL 没有此规定 T-SQL 示例: 3、JET SQL 只允许单句的 SQL 语句出现,";"分号是JET SQL 语句的最后一个字符,后面不允许再出现其他字符;而 T-SQL 查询分析器或用ADO执行T-SQL语句时可以连续执行两句,两句之间可以用分号间隔。 4、T-SQL 支持用 "--" 两个连字符在 T-SQL 语句中进行注释;JET SQL 语句不支持注释 5、T-SQL 的 UPDATE set 子句中允许用括号中的select 语句的返回值;在JET SQL 不支持,但可以用域函数 JET-SQL 示例: 在多个环境中 T-SQL 中都允许用 () 括号中返回单一值的 SELECT 语句代替某个固定值,而JET SQL 语句中一般都使用域函数解决 T-SQL 示例: jet-sql 示例: |