紧急!这句查询在MSSQL中没问题但在Sybase中就报错,请帮忙看看

GhostAdai 2008-06-30 10:57:38
在MSSQL中我用以下查询:select top 10 cardid,salesman,begindate from card where salesman='张三' and cardid not in (select top 10 cardid from card where salesman='张三' order by cardid) order by cardid
没有问题,但在Sybase下就报错,应该怎么解决呢?
我是要作分页查询,如果这样写不行的话应该怎么换成Sybase中对应的SQL语句?不要用set rowcount的方法,因为我是在程序中执行,不能向数据库中添加存储过程的。
...全文
254 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
litongqq 2012-04-04
  • 打赏
  • 举报
回复
top 10后面加上*就可以了
GhostAdai 2008-08-01
  • 打赏
  • 举报
回复
已经结贴了还能抽时间解答我的问题,谢谢了,等我有时间再试试吧。
jamo 2008-07-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 GhostAdai 的回复:]
我更晕~~
我就是没看明白为什么不直接写"select col1, sybid=identity(12) into #temp_tab from tab1"这一句而是还多替换一次,难道有什么玄机?
我不是不知道后面的拼字符串的参数是什么意思,而是identity(12)这个是代表什么因为没以前用过Sybase数据库所以不明白,中间的12改变会有什么影响麻烦再耐心解释一下,因为我在网上看到有些例子这里写的是10。
瀑布寒自己一个先-_-bbb
[/Quote]

你也可以直接写。因为分页而额外加上的东西对每条语句都是一样的, 用替换是为了不用每次都敲同样的东西, 粘贴即可。
12 相当于整型ID的位数, 当然 10 / 5 位随你需要。

同瀑布汗你一个……
GhostAdai 2008-07-26
  • 打赏
  • 举报
回复
谢谢大家的回复,这段时间要忙别的工程,这个问题先搁下了,回头有时间再试大家提出的方案行不行,先结贴了。
ribut9225 2008-07-16
  • 打赏
  • 举报
回复

用游标做吧

低版本不支持TOP的

就用游标检索数据,到了10条记录就退出
ntahua 2008-07-16
  • 打赏
  • 举报
回复
set rowcount不一定要在过程里使用。不知道你说的在程序里使用是什么意思,反正我编程的时候用过没问题
GhostAdai 2008-07-15
  • 打赏
  • 举报
回复
另外我已经试过了jamo的方法,结论是:不行!报内存不足的错误。
GhostAdai 2008-07-03
  • 打赏
  • 举报
回复
再次先谢谢各位这么耐心的给我解释。
GhostAdai 2008-07-03
  • 打赏
  • 举报
回复
我更晕~~
我就是没看明白为什么不直接写"select col1, sybid=identity(12) into #temp_tab from tab1"这一句而是还多替换一次,难道有什么玄机?
我不是不知道后面的拼字符串的参数是什么意思,而是identity(12)这个是代表什么因为没以前用过Sybase数据库所以不明白,中间的12改变会有什么影响麻烦再耐心解释一下,因为我在网上看到有些例子这里写的是10。
瀑布寒自己一个先-_-bbb
jamo 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 GhostAdai 的回复:]
我昏~写代码的人不代表什么数据库都会用,明白?我只知道你那是用建临时表的方法,能不能用还是两个字!
[/Quote]
我也晕~ 哈
1、能用的,12.5, 15.0 都正确运行;
2、详细注释如下:
sql = "select col1 from tab1"; // 初始语句

// Paging
sql = sql.replaceFirst(" from ", ", sybid=identity(12) into #temp_tab from ");
// replaceFirst是个基本函数, 看名字就知道是干啥的,写过代码的人都知道, 所以我说……
// 此句后语句变成 select col1, sybid=identity(12) into #temp_tab from tab1


sql = sql + " select * from #temp_tab where sybid > " + (pageno-1)*rec_per_page + " and sybid <= " + (pageno)*rec_per_page ;
// 这里面的 pageno, rec_per_page 两个变量不懂啥意思? 这点英文水平不能没有吧。
// 这句是添加多一个sql语句。 前句把结果放到临时表, 后句取出特定位置的记录



我都佩服死自己了, 太有耐心了!
wenjunqianli 2008-07-02
  • 打赏
  • 举报
回复
set rowcount 10
select cardid,salesman,begindate from card where salesman='张三' and cardid not in (select top 10 cardid from card where salesman='张三' order by cardid) order by cardid
set rowcount 0
这样不就完了?不可能在程序中写二句么

GhostAdai 2008-07-01
  • 打赏
  • 举报
回复
我昏~写代码的人不代表什么数据库都会用,明白?我只知道你那是用建临时表的方法,能不能用还是两个字!
jamo 2008-07-01
  • 打赏
  • 举报
回复
看来你是不写代码的人, 那我就不浪费口水了。
GhostAdai 2008-06-30
  • 打赏
  • 举报
回复
我晕啊,事态紧急啊,真没办法解决的话我饭碗都得丢了啊,那个头儿屁都不懂,现在他只认准了是我的问题,快来个人救命啊!
sybasebbs 2008-06-30
  • 打赏
  • 举报
回复
暂无好的方法,要么升级,要么工程也不小。
GhostAdai 2008-06-30
  • 打赏
  • 举报
回复
现在的问题是数据库不是我来管理啊,是另一个部门负责的,他们不动我也没辄!没有其他办法代替吗?或者有其他在查询时分页的方法也行,如果是缓存数据集就免了,数据量太大,慢还不说,总报内存不够的错。
wwwwb 2008-06-30
  • 打赏
  • 举报
回复
不支持TOP,升级吧
GhostAdai 2008-06-30
  • 打赏
  • 举报
回复
昏~~~数据库不是我管,版本低我也没办法,现在程序没法过老板只会找我的麻烦,我总不能说:管理员你去把数据库升级一下吧!
hobbylu 2008-06-30
  • 打赏
  • 举报
回复
版本太低
GhostAdai 2008-06-30
  • 打赏
  • 举报
回复
com.sybase.jdbc2.jdbc.SybSQLException: Incorrect syntax near the keyword 'top'
好像是top关键字有问题。
加载更多回复(5)

2,598

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧