You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
5.1 KiB

1 year ago
  1. USE [FastMoneyPro_Remit]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[proc_paging] Script Date: 9/27/2019 1:30:14 PM ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE PROC [dbo].[proc_paging]
  9. @table VARCHAR(MAX) = NULL
  10. ,@sqlFilter VARCHAR(MAX) = NULL
  11. ,@selectFieldList VARCHAR(MAX) = NULL
  12. ,@extraFieldList VARCHAR(MAX) = NULL
  13. ,@sortBy VARCHAR(100) = NULL
  14. ,@sortOrder VARCHAR(5) = NULL
  15. ,@pageSize INT = NULL
  16. ,@pageNumber INT = NULL
  17. ,@noPaging CHAR(1) = NULL
  18. AS
  19. IF NULLIF(@pageSize, 0) IS NULL
  20. SET @pageSize = 10
  21. IF NULLIF(@pageNumber, 0) IS NULL
  22. SET @pageNumber = 1
  23. IF @sortOrder IS NULL
  24. SET @sortOrder = 'ASC'
  25. IF NULLIF(@pageSize, 0) IS NULL
  26. SET @pageSize = 10
  27. IF NULLIF(@pageNumber, 0) IS NULL
  28. SET @pageNumber = 1
  29. DECLARE
  30. @sqlCount VARCHAR(MAX)
  31. ,@sql VARCHAR(MAX)
  32. SET @sql = '
  33. SELECT
  34. {select_field_list}
  35. FROM ' + @table + ' WHERE 1 = 1
  36. ' + '
  37. '
  38. + ISNULL(@sqlFilter, '')
  39. SET @sqlCount = REPLACE(@sql, '{select_field_list}', 'COUNT_BIG(*) total_row')
  40. SET @sql = REPLACE(@sql, '{select_field_list}', 'ROW_NUMBER() OVER (ORDER BY {sort_by} {sort_order}) rowid_by_ROW_NUMBER, ' + @selectFieldList)
  41. SET @sql = '
  42. SELECT rowid_by_ROW_NUMBER - ' + CAST(((@pageNumber - 1) * @pageSize) AS VARCHAR(50)) + ' SN,'
  43. + @selectFieldList + ISNULL(@extraFieldList, '') + '
  44. FROM (
  45. ' + @sql + '
  46. ) x '
  47. + CASE
  48. WHEN @pageSize <> -1 THEN '
  49. WHERE rowid_by_ROW_NUMBER BETWEEN '
  50. + CAST(((@pageNumber - 1) * @pageSize + 1) AS VARCHAR(50))
  51. + ' AND ' + CAST((@pageNumber * @pageSize) AS VARCHAR(50))
  52. ELSE ''
  53. END
  54. SET @sql = REPLACE(@sql, '{sort_by}', @sortBy )
  55. SET @sql = REPLACE(@sql, '{sort_order}', @sortOrder)
  56. PRINT @sql
  57. --Calculating page numbers starts
  58. DECLARE
  59. @totalRows INT
  60. ,@totalPage INT
  61. IF OBJECT_ID(N'tempdb..#totalRows') IS NOT NULL
  62. DROP Table #totalRows
  63. CREATE TABLE #totalRows (totalRows BIGINT)
  64. EXEC ('INSERT #totalRows(totalRows) SELECT ISNULL((' + @sqlCount + '), 0)')
  65. SET @totalRows = ISNULL((SELECT totalRows FROM #totalRows), 0)
  66. SET @totalPage = @totalRows / @pageSize
  67. IF @totalRows % @pageSize > 0
  68. SET @totalPage = @totalPage + 1
  69. IF @pageSize <> -1
  70. SELECT @totalRows totalRow, ABS(@pageNumber) pageNumber, @totalPage totalPage, ABS(@pageSize) pageSize
  71. ELSE
  72. SELECT @totalRows totalRow, 1 pageNumber, 1 totalPage, @totalRows pageSize
  73. --Calculating page numbers ends
  74. PRINT @sql
  75. EXEC (@sql)
  76. GO