Access数据库的JET-SQL问题(转)

2 篇文章 0 订阅
1 篇文章 0 订阅

问题的出现

用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 用 ' 号
Jet SQL 示例:
select * from [table] where [date field] >=#2006-1-1#
T-SQL 示例:
select * from [table] where [date field] >='2006-1-1'

2、多层套嵌时 JET SQL 必须将 SELECT 子句用括号 ( ) 一层一层包含起来,而 T-SQL 没有此规定
Jet SQL 示例:
select [table1].[field1],[table2].[field4],[table3].[field3],[table4].[field4] 
from ((([table1] left join [table2] on [table1].[field1]=[table2].[field1]) 
     left join [table3] on [table1].[field1]=[table3].[field1]) 
     left join [table4] on [table1].[field1]=[table4].[field1])

T-SQL 示例:
select [table1].[field1],
        [table2].[field4],
        [table3].[field3],
        [table4].[field4] 
from [table1] left join [table2] on [table1].[field1]=[table2].[field1] 
               left join [table3] on [table1].[field1]=[table3].[field1]
               left join [table4] on [table1].[field1]=[table4].[field1]

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 不支持,但可以用域函数
T-SQL 示例:
update [table] set [field] = (select top 1 [field2] from [table2] order by [field3])

JET-SQL 示例:
update [table] set [field] = dmax("field2","table2")

在多个环境中 T-SQL 中都允许用 () 括号中返回单一值的 SELECT 语句代替某个固定值,而JET SQL 语句中一般都使用域函数解决

T-SQL 示例:
select [field1],(select top 1 [field3] from [table3] where [field2]=15) as newfield from [table1]

jet-sql 示例:
select [field1],dlookup("field3","table3","field2=15") as newfield from [table1]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值