婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態SQL)

sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態SQL)

熱門標簽:一個導航軟件能用幾個地圖標注點 百度地圖標注改顏色 臨沂智能電銷機器人加盟哪家好 申請400電話在哪辦理流程 貴州房產智能外呼系統供應商 鎮江網路外呼系統供應商 小e電話機器人 電銷外呼有錄音系統有哪些 外呼運營商線路收費
1,場景:根據學生編號查詢,返回該學生所在班級的所有學生。支持分頁、自定義排序及結果集自動定位到查詢條件的學生編號所在頁。
復制代碼 代碼如下:

CREATE PROC [dbo].[Sp_testpagerandsorting] (@GroupID INT,
@CurrentId INT,
@TimeFrom DATETIME,
@TimeTo DATETIME,
@OrderBy CHAR(50),
@PageSize INT,
@CurrentPage INT)
AS
SET nocount ON
BEGIN
DECLARE @StartNumber INT,
@EndNumber INT,
@CurrentIdRowNumber INT,
@RecordCount INT,
@EndPageIndex INT
DECLARE @RowNumberTable TABLE (
rownumber INT IDENTITY (1, 1),
id INT )
--step 1: Build sort id list -------------------------------------------------------
INSERT INTO @RowNumberTable
(id)
SELECT sm.id AS id
FROM dbo.test sm WITH (nolock)
WHERE indate BETWEEN Coalesce(@TimeFrom, indate) AND
Coalesce(@TimeTo, indate)
AND sm.groupid = @GroupID
ORDER BY CASE
WHEN @OrderBy = 'InDate desc' THEN ( Row_number() OVER (ORDER BY indate DESC))
WHEN @OrderBy = 'InDate asc' THEN (Row_number() OVER (ORDER BY indate ASC))
WHEN @OrderBy = 'Id asc' THEN (Row_number() OVER (ORDER BY sm.id ASC))
WHEN @OrderBy = 'Id desc' THEN (Row_number() OVER (ORDER BY sm.id DESC))
WHEN @OrderBy = 'Name asc' THEN (Row_number() OVER (ORDER BY sm.name ASC))
WHEN @OrderBy = 'Name desc' THEN (Row_number() OVER (ORDER BY sm.name DESC) )
END
--step 2: Reset page index with current id -----------------------------------------
IF @CurrentIdNumber > 0
BEGIN
SELECT TOP 1 @CurrentIdRowNumber = rownumber
FROM @RowNumberTable
WHERE id = @CurrentIdNumber
IF @CurrentIdRowNumber > 0
BEGIN
IF @CurrentPage = 0
BEGIN
SET @CurrentPage = Ceiling(CAST(@CurrentIdRowNumber AS DECIMAL) / CAST (@PageSize AS DECIMAL))
END
END
END
ELSE
BEGIN
IF @CurrentPage = 0
BEGIN
SET @CurrentPage = 1
END
END
--step 3: Set recordCount -----------------------------------------
SELECT @RecordCount = COUNT(1)
FROM @RowNumberTable
--step 4: Calc startNumber endNumber -----------------------------------------
SELECT @StartNumber = @PageSize * ( @CurrentPage - 1 ),
@EndNumber = @PageSize * ( @CurrentPage - 1 ) + @pageSize,
@EndPageIndex = Ceiling(CAST(@RecordCount AS DECIMAL) / CAST(@PageSize AS DECIMAL))
IF @CurrentPage = @EndPageIndex
BEGIN
SET @EndNumber = @RecordCount
END
--step 5: Get sorted id of current page -----------------------------------------
;WITH a
AS (SELECT TOP (@EndNumber - @StartNumber) id,
rownumber
FROM (SELECT TOP (@EndNumber) id,
rownumber
FROM @RowNumberTable) AS b
ORDER BY rownumber DESC)
--step 6: Return current page idList -------------------------------------------------------
SELECT [ID],
[GroupID] [Name],
[Address]
FROM dbo.test sm WITH(nolock)
INNER JOIN a
ON a.id = sm.id
ORDER BY a.rownumber
-- step 7:return current page record count ----------------------------------
SELECT @CurrentPage AS currentpage,
@RecordCount AS recordcount
END

2,簡單條件的,動態where語句(關于Like查詢的動態where,建議使用笨辦法做)
復制代碼 代碼如下:

CREATE PROC [dbo].[Getstudentlistbycondition] @Name NVARCHAR(20),
@Class INT
AS
SET nocount ON
BEGIN
BEGIN
SELECT [Name],
[class]
FROM [testtable]
WHERE [Class] = CASE
WHEN @Class > 0 THEN @Class ELSE [Class] END
AND [name] = CASE
WHEN @Name > '' THEN @Name ELSE [Name] END
END
END
您可能感興趣的文章:
  • 基于Oracle的高性能動態SQL程序開發
  • 為什么ASP中執行動態SQL總報錯誤信息?提示語句語法錯誤
  • 批處理 動態sql
  • 動態SQL語句使用心得
  • 編程經驗點滴 動態SQL的拼接技巧
  • oracle中動態SQL使用詳細介紹
  • mysql存儲過程 在動態SQL內獲取返回值的方法詳解
  • MySQL 存儲過程中執行動態SQL語句的方法
  • mybatis的動態sql詳解(精)

標簽:三明 嘉興 澳門 晉城 保定 合肥 日照 延邊

巨人網絡通訊聲明:本文標題《sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態SQL)》,本文關鍵詞  sqlserver,支持,定位,當前,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態SQL)》相關的同類信息!
  • 本頁收集關于sqlserver 支持定位當前頁,自定義排序的分頁SQL(拒絕動態SQL)的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 玉山县| 天长市| 大理市| 沙洋县| 蕉岭县| 凤凰县| 庆安县| 邹城市| 行唐县| 当雄县| 黔东| 清丰县| 鄯善县| 肃南| 汉沽区| 丹凤县| 延津县| 宁远县| 光泽县| 岑巩县| 渑池县| 类乌齐县| 丘北县| 海安县| 崇仁县| 新郑市| 喀喇沁旗| 西宁市| 海兴县| 内丘县| 福鼎市| 青田县| 石柱| 称多县| 苏尼特左旗| 武陟县| 铜陵市| 芜湖市| 宁阳县| 湘西| 长丰县|