取n到m条记录的语句 1. 
select top m * from tablename where id not in (select top n id from tablename) 2. 
select top m * into 临时表(或表变量) from tablename order by columnname -- 将top m笔插入 
set rowcount n 
select * from 表变量 order by columnname desc 3. 
select top n * from  
(select top m * from tablename order by columnname) a 
order by columnname desc 
4.如果tablename里没有其他identity列,那么: 
select identity(int) id0,* into #temp from tablename 取n到m条的语句为: 
select * from #temp where id0 > =n and id0  <= m 如果你在执行select identity(int) id0,* into #temp from tablename这条语句的时候报错,那是因为你的DB中间的select into/bulkcopy属性没有打开要先执行: 
exec sp_dboption 你的DB名字,'select into/bulkcopy',true 
5.如果表里有identity属性,那么简单: 
select * from tablename where identitycol between n and m  

解决方案 »

  1.   

    带条件的话要带条件查询两次,效率太低了。。
    因为是写在程序里,所以必须一条语句解决。。
    我用:
    select top 8 * from (select top 24 EnterpriseID, EnterpriseName, [Address], AreaCode, Telephone, EditDate from [21yp_disk] where 1 = 1 and (EnterpriseName like '%关键字%' or Keyword like '%关键字%') order by EnterpriseID) order by EnterpriseID desc
    会报错说:
    消息 156,级别 15,状态 1,第 1 行
    关键字 'order' 附近有语法错误。
    同2,没有一句解决,而且大量用户搜索会生成太多临时表?
    带条件的话identitycol还有用吗?
      

  2.   


    select top 8 * from (
      select top 24 EnterpriseID, EnterpriseName, [Address], AreaCode, Telephone, EditDate from [21yp_disk] 
        where (EnterpriseName like '%关键字%' or Keyword like '%关键字%') order by EnterpriseID ) A 
    order by EnterpriseID desc 
    行不?