스토어드 프로세스는 실행 가능한 객체로 데이터베이스에 저장된 하나 이상의 SQL 명령입니다.
정의는 항상 추상적입니다. 저장 프로세스는 실제로 특정 작업을 완료할 수 있는 SQL 문 집합이지만 이 문 집합은 데이터베이스에 배치됩니다(여기에서는 SQL SERVER에 대해서만 설명합니다). 저장 프로세스를 생성하고 ASP에서 저장 프로세스를 호출하면 SQL 문과 ASP 코드가 혼합되는 것을 방지할 수 있습니다. 이렇게 하면 최소한 세 가지 이점이 있습니다.
첫째, 효율성을 크게 향상시킵니다. 스토어드 프로세스 자체의 실행 속도는 매우 빠르며, 스토어드 프로세스를 호출하면 데이터베이스와의 상호 작용 횟수를 크게 줄일 수 있습니다.
둘째, 안전성을 향상시킨다. ASP 코드에 SQL 문을 혼합하면 코드가 손상되면 라이브러리 구조도 손상된다는 의미입니다.
셋째, SQL문의 재사용에 유리하다.
ASP에서는 일반적으로 COMMAND 개체를 통해 저장 프로세스를 호출합니다. 이 기사에서는 상황에 따라 다른 호출 방법도 소개합니다. 설명의 편의를 위해 스토어드 프로세스의 입력과 출력을 기준으로 다음과 같이 간단하게 분류합니다.
1. 단일 레코드 세트만 반환하는 저장 프로세스
다음과 같은 저장 프로세스가 있다고 가정합니다(이 문서의 목적은 T-SQL 구문을 설명하는 것이 아니므로 저장 프로세스는 설명 없이 코드만 제공합니다).
/*SP1*/
프로시저 DBO.GETUSERLIST 생성
처럼
카운트 없음 설정
시작하다
DBO에서 *를 선택하세요.[USERINFO]
끝
가다
위의 스토어드 프로세스는 USERINFO 테이블의 모든 레코드를 획득하고 레코드 세트를 반환합니다. COMMAND 객체를 통해 스토어드 프로세스를 호출하기 위한 ASP 코드는 다음과 같습니다.
'**COMMAND 객체를 통해 스토어드 프로세스 호출**
딤 마이컴, 머스트
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
MYCOMM.COMMANDTEXT = GETUSERLIST '저장된 프로세스 이름 지정
MYCOMM.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
MYCOMM.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
MYRST 설정 = MYCOMM.EXECUTE
MYCOMM = 아무것도 설정하지 않음
저장 과정을 통해 얻은 레코드 셋을 MYRST에 할당한다. 다음으로 MYRST를 동작시킬 수 있다.
위 코드에서 COMMANDTYPE 속성은 요청 유형을 나타냅니다. 값과 설명은 다음과 같습니다.
-1은 COMMANDTEXT 매개변수의 유형을 판별할 수 없음을 나타냅니다.
1은 COMMANDTEXT가 일반 명령 유형임을 나타냅니다.
2는 COMMANDTEXT 매개변수가 다음과 같은 테이블 이름임을 나타냅니다.
4는 COMMANDTEXT 매개변수가 스토어드 프로세스의 이름임을 나타냅니다.
CONNECTION 객체나 RECORDSET 객체를 통해 스토어드 프로세스를 호출할 수도 있습니다.
'**CONNECTION 객체를 통해 스토어드 프로세스 호출**
디미콘,미르스트
MYCONN 설정 = SERVER.CREATEOBJECT(ADODB.CONNECTION)
MYCONN.OPEN MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
SET MYRST = MYCONN.EXECUTE(GETUSERLIST,0,4) '마지막 매개변수는 COMMANDTYPE과 같은 의미입니다.
MYCONN = 아무것도 설정하지 않음
'**RECORDSET 객체를 통해 스토어드 프로세스 호출**
디미르스트
MYRST 설정 = SERVER.CREATEOBJECT(ADODB.RECORDSET)
MYRST.OPEN GETUSERLIST,MYCONSTR,0,1,4
'MYCONSTR은 데이터베이스 연결 문자열이며 마지막 매개변수는 COMMANDTYPE과 동일한 의미를 갖습니다.
2. 입력과 출력이 없는 저장 프로세스
다음 저장 프로시저를 살펴보세요.
/*SP2*/
프로시저 DBO.DELUSERALL 생성
처럼
카운트 없음 설정
시작하다
DBO에서 삭제합니다.[USERINFO]
끝
가다
이 저장 프로세스는 입력이나 출력 없이 USERINFO 테이블의 모든 레코드를 삭제합니다. 호출 방법은 레코드 세트를 가져올 필요가 없다는 점을 제외하면 기본적으로 위에서 언급한 것과 동일합니다.
'**COMMAND 객체를 통해 스토어드 프로세스 호출**
DIMMYCOMM
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
MYCOMM.COMMANDTEXT = DELUSERALL '저장된 프로세스 이름을 지정합니다.
MYCOMM.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
MYCOMM.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
MYCOMM.EXECUTE '여기에 설정된 레코드를 얻을 필요가 없습니다.
MYCOMM = 아무것도 설정하지 않음
물론 이러한 저장 프로세스는 CONNECTION 객체나 RECORDSET 객체를 통해서도 호출할 수 있지만, 레코드 세트를 얻기 위해 RECORDSET 객체를 생성한 경우에는 COMMAND 객체를 사용한다.
3. 반환 값이 있는 저장 프로시저
SP2와 유사한 작업을 수행할 때는 SQL SERVER의 강력한 트랜잭션 처리 기능을 최대한 활용하여 데이터 일관성을 유지해야 합니다. 또한 프로세스에서 반환된 실행 상태를 저장해야 할 수도 있습니다. 이를 위해 SP2를 다음과 같이 수정합니다.
/*SP3*/
프로시저 DBO.DELUSERALL 생성
처럼
카운트 없음 설정
시작하다
거래 시작
DBO에서 삭제합니다.[USERINFO]
@@ERROR=0인 경우
시작하다
트랜잭션 커밋
반환 1
끝
또 다른
시작하다
롤백 트랜잭션
0을 반환
끝
반품
끝
가다
위의 저장 프로세스는 DELETE가 성공적으로 수행되면 1을 반환하고, 그렇지 않으면 0을 반환하고 롤백 작업을 수행합니다. ASP에서 반환 값을 얻으려면 PARAMETERS 컬렉션을 사용하여 매개 변수를 선언해야 합니다.
'**반환 값을 사용하여 저장 프로세스를 호출하고 반환 값을 가져옵니다**
딤마이컴,마이파라
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
MYCOMM.COMMANDTEXT = DELUSERALL '저장된 프로세스 이름을 지정합니다.
MYCOMM.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
MYCOMM.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
'반환값 선언
SET MYPARA = MYCOMM.CREATEPARAMETER(RETURN,2,4)
MYCOMM.PARAMETERS.APPEND MYPARA
마이컴.실행
'반환값을 받아라
희미한 수익
RETVALUE = MYCOMM(0) '또는 RETVALUE = MYCOMM.PARAMETERS(0)
MYCOMM = 아무것도 설정하지 않음
MYCOMM.CREATEPARAMETER(RETURN,2,4)에서 각 매개변수의 의미는 다음과 같습니다.
첫 번째 매개변수(RETURE)는 매개변수 이름입니다. 매개변수 이름은 임의로 설정할 수 있으나 일반적으로 스토어드 프로세스에서 선언한 매개변수 이름과 동일해야 한다. 반환 값은 다음과 같습니다. 저는 보통 RETURE로 설정합니다.
두 번째 매개변수(2)는 매개변수의 데이터 유형을 나타냅니다. 특정 유형 코드는 아래에 나와 있습니다.
ADDIGINT: 20;
종독소: 128;
아드불린: 11;
ADCHAR: 129;
ADDBTIMESTAMP: 135;
숙련도: 0;
ADINTEGER: 3;
ADSMALLINT: 2;
ADTINYINT: 16;
ADVARCHAR: 200;
반환값은 정수값만 취할 수 있으며 -1~-99는 예약된 값이다.
세 번째 매개변수(4)는 매개변수의 특성을 나타내며, 여기서 4는 이것이 반환 값임을 나타냅니다. 이 매개변수 값에 대한 설명은 다음과 같습니다.
0: 유형을 결정할 수 없습니다. 1: 입력 매개변수, 3: 입력 또는 출력 매개변수,
위에 제시된 ASP 코드는 완전한 코드, 즉 실제로 가장 복잡한 코드라고 해야 합니다.
SET MYPARA = MYCOMM.CREATEPARAMETER(RETURN,2,4)
MYCOMM.PARAMETERS.APPEND MYPARA
다음과 같이 단순화될 수 있다
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER(RETURN,2,4)
나중에 설명하겠지만 더 단순화할 수도 있습니다.
매개변수가 있는 저장 프로시저의 경우 COMMAND 객체를 통해서만 호출할 수 있습니다. (CONNECTION 객체나 RECORDSET 객체를 통해서도 호출할 수 있다는 정보도 있지만 시도해 보지 않았습니다.)
4. 입력 매개변수와 출력 매개변수가 있는 저장 프로세스
반환 값은 실제로 특수 출력 매개변수입니다. 대부분의 경우 입력 매개변수와 출력 매개변수가 모두 있는 저장 프로세스를 사용합니다. 예를 들어 사용자 정보 테이블에서 특정 ID를 가진 사용자의 사용자 이름을 얻으려고 합니다. ---사용자 ID 및 출력 매개변수---사용자 이름. 이 기능을 구현하는 저장 프로세스는 다음과 같습니다.
/*SP4*/
프로시저 DBO.GETUSERNAME 생성
@USERIDINT,
@USERNAME VARCHAR(40) 출력
처럼
카운트 없음 설정
시작하다
@USERID가 NULL인 경우 반환
@사용자 이름=사용자 이름 선택
DBO에서.[사용자 정보]
여기서 사용자ID=@사용자ID
반품
끝
가다
스토어드 프로세스를 호출하는 ASP 코드는 다음과 같습니다.
'**입력 및 출력 매개변수를 사용하여 스토어드 프로세스 호출**
DIM MYCOMM, 사용자 ID, 사용자 이름
사용자ID=1
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
MYCOMM.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
MYCOMM.COMMANDTEXT = GETUSERNAME '저장된 프로세스 이름을 지정합니다.
MYCOMM.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
MYCOMM.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
'매개변수 선언
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER(@USERID,3,1,4,USERID)
MYCOMM.PARAMETERS.APPEND MYCOMM.CREATEPARAMETER(@USERNAME,200,2,40)
마이컴.실행
'매개변수 가져오기
사용자 이름 = 마이컴(1)
MYCOMM = 아무것도 설정하지 않음
위 코드를 보면 반환값 선언과 달리 입력 매개변수 선언 시에는 5개의 매개변수가 필요하고, 출력 매개변수 선언 시에는 4개의 매개변수가 필요한 것을 알 수 있다. 입력 매개변수를 선언할 때 5개의 매개변수는 매개변수 이름, 매개변수 데이터 유형, 매개변수 유형, 데이터 길이 및 매개변수 값입니다. 출력 매개변수를 선언할 때 마지막 매개변수인 매개변수 값이 없습니다.
특별한 주의가 필요합니다: 매개변수를 선언할 때 순서는 저장 프로세스에서 정의된 것과 동일해야 하며, 각 매개변수의 데이터 유형과 길이도 저장 프로세스에서 정의된 것과 동일해야 합니다.
스토어드 프로세스에 여러 매개변수가 있는 경우 ASP 코드가 복잡해 보일 수 있습니다. WITH 명령을 사용하여 코드를 단순화할 수 있습니다.
'**입력 및 출력 매개변수를 사용하여 스토어드 프로세스 호출(단순 코드)**
DIM MYCOMM, 사용자 ID, 사용자 이름
사용자ID=1
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
마이컴과 함께
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
.COMMANDTEXT = GETUSERNAME '저장된 프로세스 이름을 지정합니다.
.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
.PARAMETERS.APPEND .CREATEPARAMETER(@USERID,3,1,4,USERID)
.PARAMETERS.APPEND .CREATEPARAMETER(@USERNAME,200,2,40)
.실행하다
끝
사용자 이름 = 마이컴(1)
MYCOMM = 아무것도 설정하지 않음
ID가 1부터 10까지인 사용자 10명의 사용자 이름을 얻으려면 COMMAND 개체를 10번 만들어야 합니까? 아니요. 동일한 스토어드 프로세스를 여러 번 호출해야 하는 경우 입력 매개변수만 변경하면 다른 출력을 얻을 수 있습니다.
'**동일한 스토어드 프로세스에 대한 다중 호출**
DIM MYCOMM, 사용자 ID, 사용자 이름
사용자 이름=
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
사용자 ID = 1~10
마이컴과 함께
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
.COMMANDTEXT = GETUSERNAME '저장된 프로세스 이름을 지정합니다.
.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
사용자 ID = 1인 경우
.PARAMETERS.APPEND .CREATEPARAMETER(@USERID,3,1,4,USERID)
.PARAMETERS.APPEND .CREATEPARAMETER(@USERNAME,200,2,40)
.실행하다
또 다른
'입력 매개변수에 값을 재할당(이때 매개변수 값이 변경되지 않는 입력 매개변수와 출력 매개변수는 다시 선언할 필요가 없음)
.PARAMETERS(@USERID) = 사용자ID
.실행하다
종료 IF
끝
USERNAME = USERNAME + MYCOMM(1) + , '배열 저장소를 사용하고 싶을 수도 있습니다.
다음
MYCOMM = 아무것도 설정하지 않음
위 코드에서 볼 수 있듯이 동일한 스토어드 프로세스를 반복적으로 호출할 때 값이 변경된 입력 매개변수만 다시 할당하면 됩니다. 이 메서드에는 여러 개의 입력 및 출력 매개변수가 있으며 각각 하나의 입력 매개변수 값만 호출됩니다. 변경이 발생하면 코드의 양이 크게 줄어들 수 있습니다.
5. 반환 값, 입력 매개변수 및 출력 매개변수가 동시에 포함된 저장 프로세스
앞서 언급했듯이 스토어드 프로세스를 호출할 때 매개변수가 선언되는 순서는 스토어드 프로세스에서 정의된 순서와 동일해야 합니다. 특별히 주의해야 할 또 다른 사항: 저장 프로세스에 반환 값과 입력 및 출력 매개 변수가 모두 있는 경우 반환 값을 먼저 선언해야 합니다.
이 경우 호출 방법을 설명하기 위해 위의 예를 개선해 보겠습니다. 여전히 ID 1을 가진 사용자의 사용자 이름을 가져오지만 사용자에게 해당 사용자 이름이 없을 수도 있습니다(사용자는 삭제되었으며 USERID는 자동으로 증가하는 필드입니다). 스토어드 프로세스는 사용자의 보유 여부에 따라 다른 값을 반환합니다. 이때 저장 프로세스와 ASP 코드는 다음과 같습니다.
/*SP5*/
프로시저 DBO.GETUSERNAME 생성
--순서의 느낌을 깊게 하기 위해 다음 두 매개변수의 정의 순서를 반대로 합니다.
@USERNAME VARCHAR(40) 출력,
@USERIDINT
처럼
카운트 없음 설정
시작하다
@USERID가 NULL인 경우 반환
@사용자 이름=사용자 이름 선택
DBO에서.[사용자 정보]
여기서 사용자ID=@사용자ID
IF @@ROWCOUNT>0
반환 1
또 다른
0을 반환
반품
끝
가다
'**반환 값, 입력 매개변수 및 출력 매개변수를 사용하여 스토어드 프로세스 호출**
DIM MYCOMM, 사용자 ID, 사용자 이름
사용자ID=1
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
마이컴과 함께
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
.COMMANDTEXT = GETUSERNAME '저장된 프로세스 이름을 지정합니다.
.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
'반환 값을 먼저 선언해야 합니다.
.PARAMETERS.APPEND .CREATEPARAMETER(RETURN,2,4)
'다음 두 매개변수의 선언 순서도 이에 따라 반전됩니다.
.PARAMETERS.APPEND .CREATEPARAMETER(@USERNAME,200,2,40)
.PARAMETERS.APPEND .CREATEPARAMETER(@USERID,3,1,4,USERID)
.실행하다
끝
IF MYCOMM(0) = 1이면
사용자 이름 = 마이컴(1)
또 다른
USERNAME = 이 사용자에게는 다음이 없습니다.
종료 IF
MYCOMM = 아무것도 설정하지 않음
6. 매개변수와 레코드세트를 동시에 반환하는 저장 프로세스
때로는 매개변수와 레코드 세트를 동시에 반환하기 위해 저장 프로세스가 필요한 경우가 있습니다. 예를 들어 페이징을 위해 저장 프로세스를 사용하는 경우 레코드 세트와 전체 데이터 볼륨과 같은 매개변수를 동시에 반환해야 합니다. 다음은 페이징을 위한 저장 프로세스입니다.
/*SP6*/
프로시저 DBO.GETUSERLIST 생성
@IPAGECOUNT INT OUTPUT, --총 페이지 수
@IPAGE INT, --현재 페이지 번호
@IPAGESIZE INT --페이지당 레코드 수
처럼
카운트 없음 설정
시작하다
--임시 테이블 생성
CREATE TABLE #T(ID INT IDENTITY, --자동 증가 필드
사용자 ID INT,
사용자 이름 VARCHAR(40))
--임시 테이블에 데이터 쓰기
#T에 삽입
DBO에서 사용자 ID,사용자 이름을 선택하세요.[USERINFO]
사용자ID별 주문
--총 레코드 수를 가져옵니다.
@IRECORDCOUNT INT 선언
@IRECORDCOUNT 설정 = @@ROWCOUNT
--총 페이지 수를 결정합니다.
@IRECORDCOUNT%@IPAGESIZE=0인 경우
@IPAGECOUNT=CEILING(@IRECORDCOUNT/@IPAGESIZE) 설정
또 다른
SET @IPAGECOUNT=천장(@IRECORDCOUNT/@IPAGESIZE)+1
--요청한 페이지 번호가 전체 페이지 수보다 크면 마지막 페이지가 표시됩니다.
@IPAGE > @IPAGECOUNT인 경우
@IPAGE 선택 = @IPAGECOUNT
--현재 페이지의 시작과 끝 레코드를 결정합니다.
@ISTART INT 선언 --기록 시작
@IEND INT --END RECORD 선언
@ISTART 선택 = (@IPAGE - 1) * @IPAGESIZE
@IEND 선택 = @ISTART + @IPAGESIZE + 1
--현재 페이지 기록을 가져옵니다.
SELECT * FROM #T WHERE ID>@ISTART 및 ID<@IEND
--임시 테이블 삭제
드롭 테이블 #T
--총 레코드 수를 반환합니다.
@IRECORDCOUNT로 돌아가세요.
끝
가다
위의 저장 과정에서 현재 페이지 번호와 페이지당 레코드 수를 입력하고, 현재 페이지의 레코드 세트와 전체 페이지 수, 전체 레코드 수를 반환합니다. 보다 일반적으로 총 레코드 수가 반환 값으로 반환됩니다. 다음은 스토어드 프로세스를 호출하는 ASP 코드입니다(특정 페이징 작업은 생략).
'**호 페이징 저장 프로세스**
지금 페이지가 희미해짐, 페이지 크기, 페이지 수, 레코드 수
딤 마이컴, 머스트
PAGENOW = 요청(PN)
'자연수를 확인하는 데 사용되는 사용자 정의 함수
CHECKNAR(PAGENOW) = 거짓이면 PAGENOW = 1
페이지 크기 = 20
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
마이컴과 함께
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
.COMMANDTEXT = GETUSERLIST '저장된 프로세스 이름 지정
.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
'반환값(총 레코드수)
.PARAMETERS.APPEND .CREATEPARAMETER(RETURN,2,4)
'출력 매개변수(총 페이지 수)
.PARAMETERS.APPEND .CREATEPARAMETER(@IPAGECOUNT,3,2)
'입력 매개변수(현재 페이지 번호)
.PARAMETERS.APPEND .CREATEPARAMETER(@IPAGE,3,1,4,PAGENOW)
'입력 매개변수(페이지당 레코드 수)
.PARAMETERS.APPEND .CREATEPARAMETER(@IPAGESIZE,3,1,4,PAGESIZE)
MYRST 설정 = .EXECUTE
끝
IF MYRST.STATE = 0 THEN '데이터를 얻지 못했고 MYRST가 닫힙니다.
레코드 개수 = -1
또 다른
MYRST.CLOSE '참고: 매개변수 값을 얻으려면 먼저 레코드세트 개체를 닫아야 합니다.
레코드카운트 = 마이컴(0)
페이지 수 = MYCOMM(1)
IF CINT(PAGENOW)>=CINT(PAGECOUNT) THEN PAGENOW=PAGECOUNT
종료 IF
MYCOMM = 아무것도 설정하지 않음
'아래 기록 표시
RECORDCOUNT = 0인 경우
응답.쓰기 기록 없음
ELSEIF RECORDCOUNT > 0 그러면
미르스트오픈
MYRST.EOF까지 수행
...
고리
'다음은 페이징 정보를 표시합니다.
...
ELSE '레코드 개수=-1
RESPONSE.WRITE 매개변수 오류
종료 IF
위 코드와 관련하여 설명해야 할 점은 단 하나입니다. 레코드 세트와 매개 변수를 동시에 반환할 때 매개 변수를 얻으려면 먼저 레코드 세트를 닫은 다음 사용할 때 열어야 합니다. 레코드세트.
7. 여러 레코드세트를 반환하는 저장 프로세스
이 문서에서는 먼저 레코드 집합을 반환하는 저장 프로세스를 소개합니다. 때로는 저장 프로세스가 여러 레코드 세트를 반환해야 하는 경우가 있습니다. ASP에서 이러한 레코드 세트를 동시에 가져오는 방법은 무엇입니까? 이 문제를 설명하기 위해 USERINFO 테이블에 USERTEL 및 USERMAIL이라는 두 필드를 추가하고 로그인한 사용자만 이 두 내용을 볼 수 있도록 설정합니다.
/*SP7*/
프로시저 DBO.GETUSERINFO 생성
@USERIDINT,
@체크로그인 비트
처럼
카운트 없음 설정
시작하다
@USERID가 NULL이거나 @CHECKLOGIN이 NULL인 경우 반환
사용자 이름 선택
DBO에서.[USRINFO]
여기서 사용자ID=@사용자ID
--로그인한 사용자인 경우 USERTEL 및 USERMAIL을 가져옵니다.
@CHECKLOGIN=1인 경우
사용자 전화번호,사용자 메일 선택
DBO에서.[사용자 정보]
여기서 사용자ID=@사용자ID
반품
끝
가다
다음은 ASP 코드입니다.
'**여러 레코드세트를 반환하는 저장 프로세스 호출**
DIM 확인G,USERID,USERNAME,USERTEL,USERMAIL
딤 마이컴, 머스트
사용자ID=1
'CHECKLOGIN()은 방문자가 로그인했는지 확인하는 사용자 정의 함수입니다.
CHECKLG = 체크로그인()
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
마이컴과 함께
.ACTIVECONNECTION = MYCONSTR 'MYCONSTR은 데이터베이스 연결 문자열입니다.
.COMMANDTEXT = GETUSERINFO '저장된 프로세스 이름을 지정합니다.
.COMMANDTYPE = 4 '저장 프로세스임을 나타냅니다.
.PREPARED = TRUE 'SQL 명령을 먼저 컴파일해야 합니다.
.PARAMETERS.APPEND .CREATEPARAMETER(@USERID,3,1,4,USERID)
.PARAMETERS.APPEND .CREATEPARAMETER(@CHECKLOGIN,11,1,1,CHECKLG)
MYRST 설정 = .EXECUTE
끝
MYCOMM = 아무것도 설정하지 않음
'첫 번째 레코드 세트에서 값을 가져옵니다.
사용자 이름 = MYRST(0)
'두 번째 레코드 세트에서 값을 가져옵니다.
미르스트가 아니라면 아무것도 아니다
SET MYRST = MYRST.NEXTRECORDSET()
USERTEL = MYRST(0)
사용자 메일 = MYRST(1)
종료 IF
MYRST 설정 = 아무것도 아님
위 코드에서 RECORDSET 객체의 NEXTRECORDSET 메서드는 스토리지 프로세스에서 반환된 여러 레코드 세트를 얻는 데 사용됩니다.
지금까지 이 기사에서는 ASP가 저장 프로세스를 호출하는 다양한 상황에 대해 비교적 포괄적으로 설명했습니다. 마지막으로 ASP 프로그램에서 여러 저장 프로세스를 호출하는 다양한 방법에 대해 살펴보겠습니다.
ASP 프로그램에서는 적어도 다음 세 가지 방법을 사용하여 여러 저장 프로세스를 호출할 수 있습니다.
1. 여러 COMMAND 개체 만들기
DIMMYCOMM
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
'스토어드 프로세스 1 호출
...
MYCOMM = 아무것도 설정하지 않음
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
'스토어드 프로세스 2 호출
...
MYCOMM = 아무것도 설정하지 않음
...
2. COMMAND 객체를 하나만 생성하고 통화 종료 시 해당 매개변수를 지웁니다.
DIMMYCOMM
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
'스토어드 프로세스 1 호출
.....
'매개변수 지우기(매개변수가 3개 있다고 가정)
MYCOMM.PARAMETERS.DELETE 2
MYCOMM.PARAMETERS.DELETE 1
MYCOMM.PARAMETERS.DELETE 0
'스토어드 프로세스 2를 호출하고 매개변수를 지웁니다.
...
MYCOMM = 아무것도 설정하지 않음
이때 주의할 점은 매개변수 삭제 순서와 매개변수 선언 순서가 반대라는 점입니다. 이유는 모르겠습니다.
3. PARAMETERS 데이터 컬렉션의 REFRESH 메서드를 사용하여 PARAMETER 개체를 재설정합니다.
DIMMYCOMM
SET MYCOMM = SERVER.CREATEOBJECT(ADODB.COMMAND)
'스토어드 프로세스 1 호출
.....
'PARAMETERS 데이터 컬렉션에 포함된 모든 PARAMETER 개체를 재설정합니다.
MYCOMM.PARAMETERS.REFRESH
'스토어드 프로세스 2 호출
.....
MYCOMM = 아무것도 설정하지 않음
일반적으로 객체를 반복적으로 생성하는 것은 덜 효율적인 방법이라고 여겨지지만, 테스트(테스트 도구는 MICROSOFT APPLICATION CENTER TEST) 후에 결과는 예상치 못했습니다.
방법 2 >= 방법 1 >> 방법 3
방법 2의 실행 속도는 방법 1보다 크거나 같습니다(최대 약 4% 더 높음). 이 두 가지 방법의 실행 속도는 방법 3보다 훨씬 빠릅니다(최대 130%). 매개변수가 많은 경우 방법 1. 그렇지 않은 경우 방법 2를 사용합니다.
ASP에서 저장 프로시저를 호출하는 데 대한 피상적인 경험을 마침내 작성하는 데 하루가 걸렸습니다. 그 중에는 효과만 알 뿐 원인을 모르는 경우도 있고, 틀릴 수도 있지만 이는 모두 저의 개인적인 실천에 의한 것입니다. 독자 여러분, 비판적으로 받아들이시기 바랍니다. 다른 의견이 있으시면 미리 알려주세요.