<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    MS SQL選擇固定區間條數方法

    樓主wzg1976(吃了嗎?)2004-01-06 11:19:05 在 MS-SQL Server / 基礎類 提問

    比如,我查詢的條件能返回100條記錄,而我只要取得其中的第50~第60條, ?
    ? ? ? 請問如何處理? 問題點數:20、回復次數:4Top

    1 樓zjcxc(鄒建) 回復于 2004-01-06 11:28:38 得分 20

    查詢第X頁,每頁Y條記錄 ?
    ? ?
    ? 最基本的處理方法: ?
    ? ?
    ? 如果表中有主鍵(記錄不重復的字段也可以),可以用類似下面的方法,當然x,y要換成具體的數字,不能用變量: ?
    ? ?
    ? select ? top ? y ? * ? from ? 表 ? where ? 主鍵 ? not ? in(select ? top ? (x-1)*y ? 主鍵 ? from ? 表) ?
    ? ?
    ? ?
    ? ?
    ? 如果表中無主鍵,可以用臨時表,加標識字段解決.這里的x,y可以用變量. ?
    ? ?
    ? select ? id=identity(int,1,1),* ? ? into ? #tb ? from ? 表 ?
    ? select ? * ? from ? #tb ? where ? id ? between ? (x-1)*y ? and ? x*y-1 ?
    ? ?
    ? Top

    2 樓zjcxc(鄒建) 回復于 2004-01-06 11:28:52 得分 0

    /*--用存儲過程實現的分頁程序 ?
    ? ?
    ? 顯示指定表、視圖、查詢結果的第X頁 ?
    ? 對于表中主鍵或標識列的情況,直接從原表取數查詢,其它情況使用臨時表的方法 ?
    ? 如果視圖或查詢結果中有主鍵,不推薦此方法 ?
    ? 如果使用查詢語句,而且查詢語句使用了order ? by,則查詢語句必須包含top ? 語句 ?
    ? ?
    ? --鄒建 ? 2003.09--*/ ?
    ? ?
    ? /*--調用示例 ?
    ? exec ? p_show ? '地區資料' ?
    ? ?
    ? exec ? p_show ? 'select ? top ? 100 ? percent ? * ? from ? 地區資料 ? order ? by ? 地區名稱',5,3,'地區編號,地區名稱,助記碼' ?
    ? --*/ ?
    ? ?
    ? if ? exists ? (select ? * ? from ? dbo.sysobjects ? where ? id ? = ? object_id(N'[dbo].[p_show]') ? and ? OBJECTPROPERTY(id, ? N'IsProcedure') ? = ? 1) ?
    ? drop ? procedure ? [dbo].[p_show] ?
    ? GO ?
    ? ?
    ? CREATE ? Proc ? p_show ?
    ? @QueryStr ? nvarchar(4000), --表名、視圖名、查詢語句 ?
    ? @PageSize ? int=10, --每頁的大小(行數) ?
    ? @PageCurrent ? int=1, --要顯示的頁 ?
    ? @FdShow ? nvarchar ? (4000)='', --要顯示的字段列表,如果查詢結果有標識字段,需要指定此值,且不包含標識字段 ?
    ? @FdOrder ? nvarchar ? (1000)='' --排序字段列表 ?
    ? as ?
    ? declare ? @FdName ? nvarchar(250) --表中的主鍵或表、臨時表中的標識列名 ?
    ? ,@Id1 ? varchar(20),@Id2 ? varchar(20) --開始和結束的記錄號 ?
    ? ,@Obj_ID ? int --對象ID ?
    ? --表中有復合主鍵的處理 ?
    ? declare ? @strfd ? nvarchar(2000) --復合主鍵列表 ?
    ? ,@strjoin ? nvarchar(4000) --連接字段 ?
    ? ,@strwhere ? nvarchar(2000) --查詢條件 ?
    ? ?
    ? ?
    ? select ? @Obj_ID=object_id(@QueryStr) ?
    ? ,@FdShow=case ? isnull(@FdShow,'') ? when ? '' ? then ? ' ? *' ? else ? ' ? '+@FdShow ? end ?
    ? ,@FdOrder=case ? isnull(@FdOrder,'') ? when ? '' ? then ? '' ? else ? ' ? order ? by ? '+@FdOrder ? end ?
    ? ,@QueryStr=case ? when ? @Obj_ID ? is ? not ? null ? then ? ' ? '+@QueryStr ? else ? ' ? ('+@QueryStr+') ? a' ? end ?
    ? ?
    ? --如果顯示第一頁,可以直接用top來完成 ?
    ? if ? @PageCurrent=1 ?
    ? begin ?
    ? select ? @Id1=cast(@PageSize ? as ? varchar(20)) ?
    ? exec('select ? top ? '+@Id1+@FdShow+' ? from ? '+@QueryStr+@FdOrder) ?
    ? return ?
    ? end ?
    ? ?
    ? --如果是表,則檢查表中是否有標識更或主鍵 ?
    ? if ? @Obj_ID ? is ? not ? null ? and ? objectproperty(@Obj_ID,'IsTable')=1 ?
    ? begin ?
    ? select ? @Id1=cast(@PageSize ? as ? varchar(20)) ?
    ? ,@Id2=cast((@PageCurrent-1)*@PageSize ? as ? varchar(20)) ?
    ? ?
    ? select ? @FdName=name ? from ? syscolumns ? where ? id=@Obj_ID ? and ? status=0x80 ?
    ? if ? @@rowcount=0 --如果表中無標識列,則檢查表中是否有主鍵 ?
    ? begin ?
    ? if ? not ? exists(select ? 1 ? from ? sysobjects ? where ? parent_obj=@Obj_ID ? and ? xtype='PK') ?
    ? goto ? lbusetemp --如果表中無主鍵,則用臨時表處理 ?
    ? ?
    ? select ? @FdName=name ? from ? syscolumns ? where ? id=@Obj_ID ? and ? colid ? in( ?
    ? select ? colid ? from ? sysindexkeys ? where ? @Obj_ID=id ? and ? indid ? in( ?
    ? select ? indid ? from ? sysindexes ? where ? @Obj_ID=id ? and ? name ? in( ?
    ? select ? name ? from ? sysobjects ? where ? xtype='PK' ? and ? parent_obj=@Obj_ID ?
    ? ))) ?
    ? if ? @@rowcount>1 --檢查表中的主鍵是否為復合主鍵 ?
    ? begin ?
    ? select ? @strfd='',@strjoin='',@strwhere='' ?
    ? select ? @strfd=@strfd+',['+name+']' ?
    ? ,@strjoin=@strjoin+' ? and ? a.['+name+']=b.['+name+']' ?
    ? ,@strwhere=@strwhere+' ? and ? b.['+name+'] ? is ? null' ?
    ? from ? syscolumns ? where ? id=@Obj_ID ? and ? colid ? in( ?
    ? select ? colid ? from ? sysindexkeys ? where ? @Obj_ID=id ? and ? indid ? in( ?
    ? select ? indid ? from ? sysindexes ? where ? @Obj_ID=id ? and ? name ? in( ?
    ? select ? name ? from ? sysobjects ? where ? xtype='PK' ? and ? parent_obj=@Obj_ID ?
    ? ))) ?
    ? select ? @strfd=substring(@strfd,2,2000) ?
    ? ,@strjoin=substring(@strjoin,5,4000) ?
    ? ,@strwhere=substring(@strwhere,5,4000) ?
    ? goto ? lbusepk ?
    ? end ?
    ? end ?
    ? end ?
    ? else ?
    ? goto ? lbusetemp ?
    ? ?
    ? /*--使用標識列或主鍵為單一字段的處理方法--*/ ?
    ? lbuseidentity: ?
    ? exec('select ? top ? '+@Id1+@FdShow+' ? from ? '+@QueryStr ?
    ? +' ? where ? '+@FdName+' ? not ? in(select ? top ? ' ?
    ? +@Id2+' ? '+@FdName+' ? from ? '+@QueryStr+@FdOrder ?
    ? +')'+@FdOrder ?
    ? ) ?
    ? return ?
    ? ?
    ? /*--表中有復合主鍵的處理方法--*/ ?
    ? lbusepk: ?
    ? exec('select ? '+@FdShow+' ? from(select ? top ? '+@Id1+' ? a.* ? from ?
    ? (select ? top ? 100 ? percent ? * ? from ? '+@QueryStr+@FdOrder+') ? a ?
    ? left ? join ? (select ? top ? '+@Id2+' ? '+@strfd+' ? ?
    ? from ? '+@QueryStr+@FdOrder+') ? b ? on ? '+@strjoin+' ?
    ? where ? '+@strwhere+') ? a' ?
    ? ) ?
    ? return ?
    ? ?
    ? /*--用臨時表處理的方法--*/ ?
    ? lbusetemp: ?
    ? select ? @FdName='[ID_'+cast(newid() ? as ? varchar(40))+']' ?
    ? ,@Id1=cast(@PageSize*(@PageCurrent-1) ? as ? varchar(20)) ?
    ? ,@Id2=cast(@PageSize*@PageCurrent-1 ? as ? varchar(20)) ?
    ? ?
    ? exec('select ? '+@FdName+'=identity(int,0,1),'+@FdShow+' ?
    ? into ? #tb ? from'+@QueryStr+@FdOrder+' ?
    ? select ? '+@FdShow+' ? from ? #tb ? where ? '+@FdName+' ? between ? ' ?
    ? +@Id1+' ? and ? '+@Id2 ?
    ? ) ?
    ? ?
    ? GO ?
    ? Top

    3 樓erigido(豐田村農民) 回復于 2004-01-06 11:30:31 得分 0

    收藏存儲過程先Top

    4 樓sdhdy(大江東去...) 回復于 2004-01-06 11:32:26 得分 0

    --表里沒有自增字段,才可以如下 ?
    ? select ? identity(int,1,1) ? FID,* ? into ? #temp ? from ? tablename ?
    ? go ?
    ? select ? * ? from ? #temp ? where ? FID ? between ? 50 ? and ? 60 ?
    ? go ?
    ? drop ? table ? #temp

    posted on 2007-01-23 16:19 Tom 閱讀(1378) 評論(0)  編輯  收藏 所屬分類: DB

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    導航

    統計

    常用鏈接

    留言簿(1)

    隨筆分類(42)

    隨筆檔案(43)

    文章分類

    相冊

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本免费人成黄页在线观看视频| 天天影视色香欲综合免费| 好吊妞视频免费视频| 亚洲精品中文字幕无乱码麻豆| 国产精彩免费视频| 国产成+人+综合+亚洲专| 啦啦啦高清视频在线观看免费 | 亚洲成色WWW久久网站| 久久久久久久久久久免费精品| 亚洲午夜精品第一区二区8050| 国产特黄一级一片免费| 亚洲中文字幕无码不卡电影| 青青操在线免费观看| 水蜜桃亚洲一二三四在线| 亚洲一级毛片免费看| 一本天堂ⅴ无码亚洲道久久 | 国产精品亚洲精品日韩已方| 久久久免费观成人影院| 亚洲av伊人久久综合密臀性色| 亚洲视频在线观看免费视频| 亚洲av无码一区二区三区天堂古代 | 亚洲A∨午夜成人片精品网站| 成人午夜影视全部免费看| 亚洲午夜国产精品无码老牛影视| 久久免费国产视频| 亚洲三级高清免费| 亚洲国产成人久久综合区| 国产va在线观看免费| 亚洲色少妇熟女11p| 精品国产亚洲一区二区在线观看| 久久久久高潮毛片免费全部播放 | 日本一道一区二区免费看| 久久免费国产精品| 亚洲毛片基地4455ww| 精品亚洲视频在线观看| 1000部禁片黄的免费看| 免费无码婬片aaa直播表情| 久久久久亚洲精品美女| 国产午夜无码视频免费网站| 国产99视频精品免费专区| 亚洲av无码一区二区三区人妖|