Notice
Recent Posts
Recent Comments
Tags
- asp.net Select
- 바코드 생성하기
- javascript redirection
- SSD 복사
- XSS PHP
- Mac Oracle
- 하드 윈도우 복사
- ViewData
- asp.net core swagger
- XSS방어
- asp.net core Select
- ASP.Net Core 404
- 맥 오라클설치
- JavaScript
- javascript 바코드 생성
- 404에러페이지
- ViewBag
- 원격ftp
- django 엑셀불러오기
- 말줄임표시
- 하드 마이그레이션
- asp.net dropdownlist
- php 캐쉬제거
- TempData
- jquery 바코드생성
- 타임피커
- swagger 500 error
- asp ftp
- simpe ftp
- 강제이동
웹개발자의 기지개
[MS-SQL] 저장프로시저 페이징 예제 1 본문
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_pay_suryo_list]
@table varchar(30),
@Limit INT, -- 페이지당 레코드 수
@Page INT, -- 페이지 번호 (1부터)
@Lec_code VARCHAR(50) = NULL -- 강의 코드
AS
BEGIN
SET NOCOUNT ON;
-------------------------------------------------
-- 1. 기본 방어
-------------------------------------------------
IF (@Limit IS NULL OR @Limit <= 0)
BEGIN
RAISERROR ('@Limit must be > 0', 16, 1);
RETURN;
END
IF (@Page IS NULL OR @Page <= 0)
BEGIN
SET @Page = 1;
END
-------------------------------------------------
-- 2. 페이징 계산값
-------------------------------------------------
DECLARE @n_limit INT;
DECLARE @n_range INT;
SET @n_limit = @Limit;
SET @n_range = (@Limit * @Page);
-------------------------------------------------
-- 3. 조건절 구성 (강의코드가 있을 경우 WHERE 절에 포함)
-------------------------------------------------
DECLARE @WhereCond VARCHAR(300) = '';
IF (@Lec_Code IS NOT NULL AND LTRIM(RTRIM(@Lec_Code)) <> '')
SET @WhereCond = ' WHERE LEC_CODE = ''' + @Lec_Code + '''';
-------------------------------------------------
-- 4. 전체 건수 조회 (조건 반영)
-------------------------------------------------
DECLARE @TotalCountSql NVARCHAR(400);
DECLARE @TotalCount INT;
SET @TotalCountSql = 'SELECT @TC = COUNT(*) FROM ' + @Table + ' (NOLOCK) ' + @WhereCond;
EXEC sp_executesql
@TotalCountSql,
N'@TC INT OUTPUT',
@TC = @TotalCount OUTPUT;
-------------------------------------------------
-- 5. 실제 데이터 조회 SQL 구성
-------------------------------------------------
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = 'SELECT ' +
'SEQ, UID, NAME, UNIV_ID, UNIV_NAME, ' +
'LEC_CODE, LEC_NAME, LEC_TID, ' +
'PRICE, PAY_METHOD, PAY_TYPE, PAY_UNIT, ' +
'ORDER_DATE, PAY_DATE, MEMO, ' +
'lec_start, lec_end, txn_id, OID, RECEIPT, STATE, ' +
'suryo_num, poll, ' +
CAST(@TotalCount AS VARCHAR(20)) + ' AS TOTAL_COUNT ' +
'FROM ' + @Table + ' (NOLOCK) ' +
'WHERE SEQ IN (' +
' SELECT TOP ' + CAST(@n_limit AS VARCHAR(20)) + ' SEQ FROM (' +
' SELECT TOP ' + CAST(@n_range AS VARCHAR(20)) + ' SEQ FROM ' + @Table + ' (NOLOCK) ' +
@WhereCond + -- 조건절 포함
' ORDER BY SEQ DESC' +
' ) AS a ' +
' ORDER BY SEQ ASC' +
') ' +
'ORDER BY SEQ DESC;';
-------------------------------------------------
-- 6. 실행
-------------------------------------------------
EXEC(@Sql);
END
---------------------------
--EXEC sp_pay_suryo_list
-- @Table = '_ORDER_B2C',
-- @Limit = 30,
-- @Page = 1,
-- @Lec_Code = '258';
----------------------------
|
cs |
'SQL > MS-SQL' 카테고리의 다른 글
| [MS-SQL] 형식이 같은 다른 2가지 DB 에서 데이터 변경하기 (0) | 2025.08.02 |
|---|---|
| [MS-SQL] 자동증가 초기화, 커서 초기화 시키기 (0) | 2024.11.17 |
| [MS-SQL] ROW_NUMBER() Over() 이용하기 - 페이징시 유용함 (0) | 2024.03.12 |
| [MS-SQL] Over 함수 이용하기 - 통계 순위적용 (0) | 2024.02.01 |
| [MS-SQL] 자동 증가 키값 가져오기 (0) | 2023.04.29 |
Comments
