java的jdbc和sqlserver的查询引擎

cxb1004 浙江海翕信息技术有限公司 技术总监/研发总监  2003-11-11 11:25:47
我们知道sql是一个通用的结构化查询语句,关于它的标准有多个,特别麻烦的各个厂商在开发自己的产品时会使用自己修改或改进。我在这里就讨论一下jdbc和数据库引擎的一个区别:
相比之下,我觉得jdbc使用数据库的语法更加严格,比如这个语句:
select a.id,b.name from table a,table b where a.id=b.id
这个语句在两种情况下都能够执行;
但是
select a.id,name from table a ,table b where a,id=b.id

本来用来标志字段不同之处才使用 表名.字段,一般如果两张表中不一样的字段,没有必要那样写,但是,jdbc就认为查询没有结果,但是把查询语句复制到,查询器里面就可以执行了,可见jdbc 对于sql语句的解析是十分严格的。
...全文
9 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cxb1004 2004-03-12
今天又遇到这个问题,看这个语句
select top 10 a.id,a.name from table1 a, table2 b where a.id=b.id and a.id not in (select top 0 a.id from table1 a,table2 b where a.id=b.id order by a.townid asc) order by a.townid asc
通常情况没有任何问题,但是在特殊情况:a表里面有townid一样的情况,这个时候在order by里面没有进一步的排序规定,那么,在SQLSERVER里面可以自动按照显示的列顺序进行排序,如上就是按照a.id排序,但是jdbc里面就没有这个默认的设置,这就造成了嵌套内外的排序顺序不同,使得翻页的时候有记录重复现象;改成了:
select top 10 a.id,a.name from table1 a, table2 b where a.id=b.id and a.id not in (select top 0 a.id from table1 a,table2 b where a.id=b.id order by a.townid asc,a.id asc) order by a.townid asc,a.id asc
这样就解决问题了。以后要小心,尽量在写条件的时候把条件卡死。

回复
cxb1004 2003-11-11
以后遇到这种情况,首先要输出查询语句,然后复制到查询器,或是企业管理器里面进行查询,如果能够正确输出信息,那么很有可能是查询语句不规范,导致在不同标准下查询失误。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-11-11 11:25
社区公告
暂无公告