select top 10 * from table where id not in( select top 10 id from table )
意思就是: 如果你想查詢到 第n+1到n+10的記錄
隻要查詢你要的top 10條記錄,且這10條記錄不在top n 中即可
本来就是主键,我想像效率如何更高!~我想肯定可以 就以前VB里的Dao 可以FindNext
select top 10 * from table where id>100 没有什么办法优化了吧,最多把*写成字段名,看看这条要多少时间,select top 10 * from table where id not in( select top 10 id from table ) 再看看这条
select identity(1,1) as tid,* into ##yourTable from uTable where ........ select * from ##yourTable where tid between 11 and 20
不知道楼主的原先表中是否没有ID主键? 可以这样: 先執行: select identity(int) id0,* into #temp1 from tablename;然後取10條的語句為 select top 10 * from tablename; 或者 select * from #temp where id0 <= 10取11到20條的語句為: select * from #temp where id0 >10 and id0 <= 20;以此類推......如果你在執行select identity(int) id0,* into #temp1 from tablename;這條語句的時候報錯。 那是因為你的DB中間的select into/bulkcopy屬性沒有打開。 要先執行: exec sp_dboption 你的DB名字,'select into/bulkcopy',true 將其打開,再執行: select identity(int) id0,* into #temp1 from tablename; 生成臨時表。
满足条件的第11--20条记录:select * from (select rownum r ,* from table) tt where tt.r > 10 and tt.r <= 20;
你将下列代码改为存储过程即可: exec('select identity(int,1,1) NumID,* into #temp from QY_HR..T_Talent where '+条件+'; select * from #temp where NumID>'+页数*每页记录数-每页记录数+'and NumID<'+页数*每页记录数+';drop table #temp;')
强烈建议你做这样一个存储过程,用每一次数据集(N条记录) 的第一条记录的ID(FirstNo)最后一条记录的ID(LastNo) 根据你的要求取下一个数据集的FirstNo and LastNo (ExampleTable 为结果集,也可以是整个表) 始终用下面Sql语句来取数据集 select top n * from ExampleTable where Id >= :FirstNo 动作(在StoreProcedure里实现) NextPage : select @LastNo = (select top 10 Id from ExampleTable where Id > LastNo ) select @FirstNo = (select top 10 Id from ExampleTable where Id > LastNo order by Id desc) PrePage : select @LastNo = (select top 10 Id from ExampleTable where Id < FirstNo ) select @FirstNo = (select top 10 Id from ExampleTable where Id < FirstNo order by Id desc)
我来练练: Select Top 10 * From tablename Where id not in (Select Top 20 id From tablename Order By id Desc) Order By id Desc;说明:子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列。其实上面我改动了一下,你可以参考一下csdn的文档中心,该文档的评论也是值得看一下的。 地址是:http://www.csdn.net/Develop/Read_Article.asp?Id=15464
select top 10 id from table
)
如果你想查詢到 第n+1到n+10的記錄
隻要查詢你要的top 10條記錄,且這10條記錄不在top n 中即可
就以前VB里的Dao
可以FindNext
没有什么办法优化了吧,最多把*写成字段名,看看这条要多少时间,select top 10 * from table where id not in(
select top 10 id from table
)
再看看这条
into ##yourTable
from uTable
where ........
select * from ##yourTable
where tid between 11 and 20
可以这样:
先執行:
select identity(int) id0,* into #temp1 from tablename;然後取10條的語句為
select top 10 * from tablename;
或者
select * from #temp where id0 <= 10取11到20條的語句為:
select * from #temp where id0 >10 and id0 <= 20;以此類推......如果你在執行select identity(int) id0,* into #temp1 from tablename;這條語句的時候報錯。
那是因為你的DB中間的select into/bulkcopy屬性沒有打開。
要先執行:
exec sp_dboption 你的DB名字,'select into/bulkcopy',true
將其打開,再執行:
select identity(int) id0,* into #temp1 from tablename;
生成臨時表。
FindNext 10
和
FindPre 10
功能啊
exec('select identity(int,1,1) NumID,* into #temp from QY_HR..T_Talent where '+条件+';
select * from #temp where NumID>'+页数*每页记录数-每页记录数+'and NumID<'+页数*每页记录数+';drop table #temp;')
的第一条记录的ID(FirstNo)最后一条记录的ID(LastNo)
根据你的要求取下一个数据集的FirstNo and LastNo
(ExampleTable 为结果集,也可以是整个表)
始终用下面Sql语句来取数据集
select top n * from ExampleTable where Id >= :FirstNo
动作(在StoreProcedure里实现)
NextPage :
select @LastNo = (select top 10 Id from ExampleTable where Id > LastNo )
select @FirstNo = (select top 10 Id from ExampleTable where Id > LastNo order by Id desc)
PrePage :
select @LastNo = (select top 10 Id from ExampleTable where Id < FirstNo )
select @FirstNo = (select top 10 Id from ExampleTable where Id < FirstNo order by Id desc)
Select Top 10 * From tablename Where id not in (Select Top 20 id From tablename Order By id Desc) Order By id Desc;说明:子查询排除需要显示的记录前的所有记录,父查询则对余下的记录进行降序排列。其实上面我改动了一下,你可以参考一下csdn的文档中心,该文档的评论也是值得看一下的。
地址是:http://www.csdn.net/Develop/Read_Article.asp?Id=15464
关系不是非常的大(如果没有TEXT,IMAGE..字段),一般来说字段类型的影响会大一些.