ASP와 저장 프로시저(Stored Procedures)에 관한 기사는 많지만, 작성자가 실제로 이를 실천해 왔는지 의심스럽습니다. 제가 초보자였을 때 관련 정보를 많이 참고한 결과 제공된 방법 중 상당수가 실제로는 동일하지 않다는 사실을 발견했습니다. 간단한 응용의 경우 이러한 자료가 도움이 될 수 있지만 기본적으로 동일하고 서로 복사하기 때문에 약간 더 복잡한 응용 프로그램의 경우 모두 불분명합니다.
이제 기본적으로 저장 프로시저를 호출하여 SQL Server에 액세스합니다. 다음 텍스트가 완전히 정확하다고 보장할 수는 없지만 모든 사람에게 도움이 되기를 바랍니다.
저장 프로시저는 데이터베이스에 실행 가능한 개체로 저장된 하나 이상의 SQL 명령입니다.
정의는 항상 추상적입니다. 저장 프로시저는 실제로 특정 작업을 완료할 수 있는 SQL 문 집합이지만 이 문 집합은 데이터베이스에 배치됩니다(여기서는 SQL Server에 대해서만 설명합니다). ASP에서 저장 프로시저를 만들고 저장 프로시저를 호출하면 SQL 문과 ASP 코드가 혼합되는 것을 방지할 수 있습니다. 이렇게 하면 최소한 세 가지 이점이 있습니다.
첫째, 효율성을 크게 향상시킵니다. 저장 프로시저 자체의 실행 속도는 매우 빠르며, 저장 프로시저를 호출하면 데이터베이스와의 상호 작용 횟수를 크게 줄일 수 있습니다.
둘째, 안전성을 향상시킨다. ASP 코드에 SQL 문을 혼합하면 코드가 손상되면 라이브러리 구조도 손상된다는 의미입니다.
셋째, SQL문의 재사용에 유리하다.
ASP에서는 일반적으로 명령 개체를 통해 저장 프로시저를 호출합니다. 이 문서에서는 상황에 따라 다른 호출 방법도 소개합니다. 설명의 편의를 위해 스토어드 프로세스의 입출력에 따라 다음과 같이 간단하게 분류한다.
1. 단일 레코드 세트만 반환하는 저장 프로시저는 다음 저장 프로시저를 가정합니다(이 문서의 목적은 T-SQL 구문을 설명하는 것이 아니므로 저장 프로시저는 설명 없이 코드만 제공합니다).
/*SP1*/
프로시저 dbo.getUserList 생성
~처럼
카운트 안함 설정
시작하다
dbo.[userinfo]에서 *를 선택하세요.
끝
go
저장 프로시저는 userinfo 테이블의 모든 레코드를 가져오고 레코드 세트를 반환합니다. Command 개체를 통해 저장 프로시저를 호출하는 ASP 코드는 다음과 같습니다.
'**Command 개체를 통해 저장 프로시저 호출**
DIM MyComm,MyRst
MyComm = Server.CreateObject("ADODB.Command") 설정
MyComm.ActiveConnection = MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
MyComm.CommandText = "getUserList" '저장 프로시저 이름 지정
MyComm.CommandType = 4 '저장 프로시저임을 나타냅니다.
MyComm.Prepared = true '먼저 컴파일할 SQL 명령이 필요합니다.
MyRst = MyComm.Execute로 설정
Set MyComm = Nothing
저장 프로시저로 얻은 레코드 세트를 MyRst에 할당합니다. 다음으로 MyRst를 실행할 수 있습니다.
위 코드에서 CommandType 속성은 요청 유형을 나타냅니다. 값과 설명은 다음과 같습니다.
-1은 CommandText 매개변수의 유형을 확인할 수 없음을 나타냅니다.
1은 CommandText가 일반 명령 유형임을 나타냅니다.
2는 CommandText 매개변수가 기존 테이블 이름임을 나타냅니다.
4 CommandText 매개변수가 저장 프로시저의 이름임을 나타냅니다
. 저장 프로시저는 Connection 개체 또는 Recordset 개체를 통해 호출할 수도 있습니다.
'**Connection 개체를 통해 저장 프로시저 호출**
DIM 마이콘, MyRst
MyConn = Server.CreateObject("ADODB.Connection") 설정
MyConn.open MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
Set MyRst = MyConn.Execute("getUserList",0,4) '마지막 매개변수는 CommandType과 동일한 의미를 갖습니다.
Set MyConn = Nothing
'**Recordset 개체를 통해 저장 프로시저 호출**
DIM MyRst
MyRst = Server.CreateObject("ADODB.Recordset") 설정
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr은 데이터베이스 연결 문자열이며 마지막 매개변수는 CommandType과 동일한 의미를 갖습니다.
2. 입력 및 출력이 없는 저장 프로시저의 경우 다음 저장 프로시저를 참조하세요.
/*SP2*/
절차 만들기 dbo.delUserAll
~처럼
카운트 안함 설정
시작하다
dbo에서 삭제합니다.[사용자 정보]
끝
go
저장 프로시저는 입력 또는 출력 없이 userinfo 테이블의 모든 레코드를 삭제합니다. 호출 방법은 레코드 세트를 가져올 필요가 없다는 점을 제외하면 기본적으로 위에서 언급한 것과 동일합니다.
'**명령을 통해 저장 프로시저 호출 물체**
DIM 마이컴
MyComm = Server.CreateObject("ADODB.Command") 설정
MyComm.ActiveConnection = MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
MyComm.CommandText = "delUserAll" '저장 프로시저 이름을 지정하세요.
MyComm.CommandType = 4 '저장 프로시저임을 나타냅니다.
MyComm.Prepared = true '먼저 컴파일할 SQL 명령이 필요합니다.
MyComm.Execute '여기에 설정된 레코드를 얻을 필요가 없습니다.
Set MyComm = Nothing
물론 이러한 저장 프로시저는 Connection 개체나 Recordset 개체를 통해서도 호출할 수 있지만, 레코드 집합을 가져오기 위해 Recordset 개체를 생성하는 경우에는 Command 개체를 사용하는 것이 좋습니다.
3. SP2와 유사한 작업을 수행할 때 반환 값이 있는 저장 프로시저는 SQL Server의 강력한 트랜잭션 처리 기능을 최대한 활용하여 데이터 일관성을 유지해야 합니다. 또한 실행 상태를 반환하려면 저장 프로시저가 필요할 수 있습니다. 이를 위해 SP2를 다음과 같이 수정합니다.
/*SP3*/
절차 만들기 dbo.delUserAll
~처럼
카운트 안함 설정
시작하다
거래 시작
dbo에서 삭제합니다.[사용자 정보]
IF @@오류=0
시작하다
트랜잭션 커밋
1을 반환
끝
또 다른
시작하다
롤백 트랜잭션
0을 반환
끝
반품
끝
삭제가 성공적으로 수행되면 1을 반환하고, 그렇지 않으면 0을 반환하고 롤백 작업을 수행합니다
.
ASP에서 반환 값을 얻으려면 매개 변수 컬렉션을 사용하여 매개 변수를 선언해야 합니다.
'**반환 값으로 저장 프로시저를 호출하고 반환 값을 가져옵니다**
DIM 마이컴,마이파라
MyComm = Server.CreateObject("ADODB.Command") 설정
MyComm.ActiveConnection = MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
MyComm.CommandText = "delUserAll" '저장 프로시저 이름을 지정하세요.
MyComm.CommandType = 4 '저장 프로시저임을 나타냅니다.
MyComm.Prepared = true '먼저 컴파일할 SQL 명령이 필요합니다.
'반환값 선언
Mypara = MyComm.CreateParameter("RETURN",2,4) 설정
MyComm.Parameters.Append MyPara
MyComm.Execute
'반환값을 받아라
DIM retValue
retValue = MyComm(0) '또는 retValue = MyComm.Parameters(0)
Set MyComm = Nothing
MyComm.CreateParameter("RETURN",2,4)에서 각 매개변수의 의미는 다음과 같습니다.
첫 번째 매개변수("RETURE")는 매개변수 이름입니다. 매개변수 이름은 임의로 설정할 수 있으나 일반적으로 저장 프로시저에서 선언한 매개변수 이름과 동일해야 한다. 반환 값은 다음과 같습니다. 저는 보통 "RETURE"로 설정합니다.
두 번째 매개변수(2)는 매개변수의 데이터 유형을 나타냅니다. 특정 유형 코드는 아래에 나와 있습니다.
adBigInt: 20;
애드바이너리: 128;
adBoolean: 11;
adChar: 129;
adDBTimeStamp: 135;
비어있음: 0;
adInteger: 3;
adSmallInt: 2;
adTinyInt: 16;
adVarChar: 200;
반환 값은 정수 값만 취할 수 있으며 -1 ~ -99는 예약된 값입니다.
세 번째 매개변수(4)는 매개변수의 특성을 나타내며, 여기서 4는 이것이 반환 값임을 나타냅니다. 이 매개변수 값에 대한 설명은 다음과 같습니다.
0: 유형을 결정할 수 없음, 1: 입력 매개변수, 3: 입력 또는 출력 매개변수, 4: 반환 값
위에 제공된 ASP 코드는 가장 복잡한 코드라고 해야 합니다. 실제로는
Mypara = MyComm.CreateParameter("RETURN",2,4)를 설정합니다
.
MyComm.Parameters.Append MyPara는
MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
로 단순화될 수
있으며 계속해서 단순화될 수도 있습니다. 이에 대해서는 나중에 설명하겠습니다.
매개 변수가 있는 저장 프로시저의 경우 Command 개체를 통해서만 호출할 수 있습니다(Connection 개체나 Recordset 개체를 통해서도 호출할 수 있다는 정보도 있지만 시도해 보지 않았습니다).
4. 입력 매개변수와 출력 매개변수가 있는 저장 프로시저의 반환 값은 실제로 특수 입력 매개변수입니다. 대부분의 경우 입력 매개변수와 출력 매개변수가 모두 있는 저장 프로시저를 사용합니다. 예를 들어 사용자 정보 테이블에서 특정 ID를 가진 사용자의 사용자 이름을 얻으려고 합니다. --user ID 및 출력 매개변수----사용자 이름. 이 기능을 구현하는 저장 프로시저는 다음과 같습니다.
/*SP4*/
프로시저 생성 dbo.getUserName
@UserID 정수,
@UserName varchar(40) 출력
~처럼
카운트 안함 설정
시작하다
@UserID가 null인 경우 반환
@UserName=사용자 이름을 선택하세요.
dbo에서.[사용자 정보]
여기서 사용자 ID=@UserID
반품
끝
go
의 ASP 코드는다음과 같습니다.
'**입력 및 출력 매개변수를 사용하여 저장 프로시저 호출**
DIM MyComm,사용자 ID,사용자 이름
사용자ID = 1
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)
MyComm.Execute
'매개변수 가져오기
사용자 이름 = MyComm(1)
Set MyComm = Nothing
위의 코드를 보면 반환값 선언과 달리 입력 매개변수 선언 시에는 5개의 매개변수가 필요하고, 출력 매개변수 선언 시에는 4개의 매개변수가 필요한 것을 알 수 있습니다. 입력 매개변수를 선언할 때 5개의 매개변수는 매개변수 이름, 매개변수 데이터 유형, 매개변수 유형, 데이터 길이 및 매개변수 값입니다. 입력 매개변수를 선언할 때 마지막 매개변수인 매개변수 값이 없습니다.
특히 주의해야 할 점은 매개변수를 선언할 때 순서가 저장 프로시저에 정의된 것과 동일해야 하며, 각 매개변수의 데이터 유형과 길이도 저장 프로시저에 정의된 것과 동일해야 한다는 것입니다.
저장 프로시저에 매개 변수가 여러 개 있으면 ASP 코드가 복잡해 보일 수 있습니다. with 명령을 사용하여 코드를 단순화할 수 있습니다.
'**입력 및 출력 매개 변수를 사용하여 저장 프로시저 호출(간단한 코드)**
DIM MyComm,사용자 ID,사용자 이름
사용자ID = 1
MyComm = Server.CreateObject("ADODB.Command") 설정
with MyComm
.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)
.실행하다
다음으로 끝나다
사용자 이름 = MyComm(1)
Set MyComm = Nothing
ID가 1~10인 사용자 10명의 사용자 이름을 얻으려면 Command 개체를 10번 만들어야 합니까? 아니요, 동일한 저장 프로시저를 여러 번 호출해야 하는 경우 입력 매개변수만 변경하면 다음과 같은 다른 입력 매개변수를 얻게 됩니다.
'**동일 저장 프로시저를 여러 번 호출**
DIM MyComm,사용자 ID,사용자 이름
사용자 이름 = ""
MyComm = Server.CreateObject("ADODB.Command") 설정
UserID = 1 ~ 10
withMyComm
.ActiveConnection = MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
.CommandText = "getUserName" '저장 프로시저 이름을 지정합니다.
.CommandType = 4 '저장 프로시저임을 나타냅니다.
.Prepared = true 'SQL 명령을 먼저 컴파일해야 합니다.
UserID = 1이면
.Parameters.append .CreateParameter("@UserID",3,1,4,UserID)
.Parameters.append .CreateParameter("@UserName",200,2,40)
.실행하다
또 다른
'입력 매개변수에 값을 재할당(이때 매개변수 값이 변경되지 않는 입력 매개변수와 출력 매개변수는 다시 선언할 필요가 없음)
.Parameters("@UserID") = 사용자ID
.실행하다
종료하면
다음으로 끝나다
UserName = UserName + MyComm(1) + "," '어레이 스토리지를 사용하고 싶을 수도 있습니다.
다음
Set MyComm = Nothing
위 코드에서 볼 수 있듯이 동일한 저장 프로시저를 반복적으로 호출할 때 값이 변경된 입력 매개변수만 다시 할당하면 됩니다. 이 메서드에는 여러 개의 입력 및 출력 매개변수가 있으며 하나만 호출됩니다. 입력 매개변수의 값이 변경되면 코드의 양이 크게 줄어들 수 있습니다.
5. 반환값, 입력 매개변수, 출력 매개변수를 동시에 갖는 저장 프로시저 앞서 언급한 것처럼 저장 프로시저 호출 시 매개변수가 선언되는 순서는 저장 프로시저에서 정의한 순서와 동일해야 한다. . 특별히 주의해야 할 또 다른 사항은 저장 프로시저에 반환 값과 입력 및 출력 매개 변수가 모두 있는 경우 반환 값을 먼저 선언해야 한다는 것입니다.
이 경우 호출 방법을 설명하기 위해 위의 예를 개선해 보겠습니다. 여전히 ID 1을 가진 사용자의 사용자 이름을 가져오지만 사용자가 존재하지 않을 수도 있습니다(사용자는 삭제되었으며 userid는 자동으로 증가하는 필드입니다). 저장 프로시저는 사용자의 존재 여부에 따라 다른 값을 반환합니다. 이때 저장 프로시저와 ASP 코드는 다음과 같습니다.
/*SP5*/
프로시저 생성 dbo.getUserName
--"순서"라는 느낌을 깊게 하기 위해 다음 두 매개변수의 정의 순서를 반대로 합니다.
@UserName varchar(40) 출력,
@UserID 정수
~처럼
카운트 안함 설정
시작하다
@UserID가 null인 경우 반환
@UserName=사용자 이름을 선택하세요.
dbo에서.[사용자 정보]
여기서 사용자 ID=@UserID
@@rowcount>0인 경우
1을 반환
또 다른
0을 반환
반품
끝
go
'**반환 값, 입력 매개변수 및 출력 매개변수를 사용하여 저장 프로시저 호출**
DIM MyComm,사용자 ID,사용자 이름
사용자ID = 1
MyComm = Server.CreateObject("ADODB.Command") 설정
withMyComm
.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)
.실행하다
다음으로 끝나다
MyComm(0) = 1이면
사용자 이름 = MyComm(1)
또 다른
UserName = "이 사용자는 존재하지 않습니다."
종료하면
Set MyComm = Nothing
6. 매개 변수와 레코드 집합을 동시에 반환하는 저장 프로시저 때로는 매개 변수와 레코드 집합을 동시에 반환하는 저장 프로시저가 필요합니다. 예를 들어 페이징을 위해 저장 프로시저를 사용하는 경우 다음과 같은 매개 변수를 반환해야 합니다. 레코드세트와 전체 데이터를 동시에 제공합니다. 다음은 페이징을 위한 저장 프로시저입니다.
/*SP6*/
프로시저 dbo.getUserList 생성
@iPageCount int OUTPUT, --총 페이지 수
@iPage int, --현재 페이지 번호
@iPageSize int --페이지당 레코드 수
~처럼
카운트 안함 설정
시작하다
--임시 테이블 생성
테이블 #t 생성(ID int IDENTITY, --auto-increment 필드
사용자 ID 정수,
사용자 이름 varchar(40))
--임시 테이블에 데이터 쓰기
#t에 삽입
dbo에서 사용자 ID, 사용자 이름을 선택합니다.[UserInfo]
사용자 ID별 주문
--총 레코드 수를 가져옵니다.
@iRecordCount int 선언
set @iRecordCount = @@rowcount
--총 페이지 수를 결정합니다.
IF @iRecordCount%@iPageSize=0
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)
또 다른
SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1
--요청한 페이지 번호가 전체 페이지 수보다 큰 경우 마지막 페이지가 표시됩니다.
IF @iPage > @iPageCount
SELECT @iPage = @iPageCount
-- 현재 페이지의 시작과 끝을 결정합니다.
DECLARE @iStart int --기록 시작
DECLARE @iEnd int --end 레코드
SELECT @iStart = (@iPage - 1) * @iPageSize
SELECT @iEnd = @iStart + @iPageSize + 1
--현재 페이지 레코드 가져오기
select * from #t where ID>@iStart and ID<@iEnd
--임시 테이블 삭제
DROP TABLE #t
--총 레코드 수를 반환합니다.
@iRecordCount를 반환합니다.
끝
위의 저장 프로시저에서
go는
현재 페이지 번호와 페이지당 레코드 수를 입력하고 현재 페이지의 레코드 세트, 전체 페이지 수, 전체 레코드 수를 반환합니다.보다 일반적으로 총 레코드 수가 반환 값으로 반환됩니다. 다음은 저장 프로시저를 호출하는 ASP 코드입니다(특정 페이징 작업은 생략).
'**페이징 저장 프로시저 호출**
지금 DIM 페이지,페이지 크기,페이지 수,레코드 수
DIM MyComm,MyRst
pagenow = 요청("pn")
'자연수를 확인하는 데 사용되는 사용자 정의 함수
CheckNar(pagenow) = false이면 pagenow = 1
페이지 크기 = 20
MyComm = Server.CreateObject("ADODB.Command")를
MyComm으로
설정합니다.
.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)
SetMyRst = .실행
다음으로 끝나다
MyRst.state = 0이면 '데이터를 얻지 못했고 MyRst가 닫힙니다.
레코드 개수 = -1
또 다른
MyRst.close '참고: 매개변수 값을 얻으려면 먼저 레코드세트 개체를 닫아야 합니다.
레코드 개수 = MyComm(0)
페이지 수 = MyComm(1)
if cint(pagenow)>=cint(pagecount)이면 pagenow=pagecount입니다.
종료하면
MyComm = Nothing으로 설정하세요
. 아래에 기록을 표시하세요.
레코드 개수 = 0이면
응답."기록 없음"이라고 쓰세요.
elseif 레코드 개수 > 0이면
MyRst.open
MyRst.EOF까지 수행
...
고리
'다음은 페이징 정보를 표시합니다.
...
else '레코드 개수=-1
응답.쓰기 "매개변수 오류"
end if
위 코드와 관련하여 설명해야 할 점은 단 하나입니다. 레코드세트와 매개변수를 동시에 반환할 때 매개변수를 얻으려면 먼저 레코드세트를 닫은 다음, 다음과 같은 경우 열어야 합니다. 레코드세트를 사용합니다.
7. 여러 레코드 세트를 반환하는 저장 프로시저 이 기사에서 가장 먼저 소개하는 것은 레코드 세트를 반환하는 저장 프로시저입니다. 때로는 여러 레코드 세트를 반환하기 위해 저장 프로시저가 필요한 경우가 있습니다. ASP에서 이러한 레코드 세트를 동시에 얻는 방법은 무엇입니까? 이 문제를 설명하기 위해 userinfo 테이블에 usertel 및 usermail 두 필드를 추가하고 로그인한 사용자만 이 두 내용을 볼 수 있도록 설정합니다.
/*SP7*/
프로시저 생성 dbo.getUserInfo
@userid 정수,
@checklogin 비트
~처럼
카운트 안함 설정
시작하다
@userid가 null이거나 @checklogin이 null인 경우 반환
사용자 이름 선택
dbo.[usrinfo]에서
여기서 사용자 ID=@userid
--로그인한 사용자인 경우 usertel 및 usermail을 가져옵니다.
@checklogin=1인 경우
사용자 전화, 사용자 메일을 선택하세요
dbo에서.[사용자 정보]
여기서 사용자 ID=@userid
반품
끝
다음은
ASP 코드입니다.
'**여러 레코드세트를 반환하는 저장 프로시저 호출**
DIM checklg,UserID,UserName,UserTel,UserMail
DIM MyComm,MyRst
사용자ID = 1
'checklogin()은 방문자가 로그인했는지 확인하는 사용자 정의 함수입니다.
checklg = 체크로그인()
MyComm = Server.CreateObject("ADODB.Command") 설정
with MyComm
.ActiveConnection = MyConStr 'MyConStr은 데이터베이스 연결 문자열입니다.
.CommandText = "getUserList" '저장 프로시저 이름 지정
.CommandType = 4 '저장 프로시저임을 나타냅니다.
.Prepared = true 'SQL 명령을 먼저 컴파일해야 합니다.
.Parameters.append .CreateParameter("@userid",3,1,4,UserID)
.Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)
SetMyRst = .실행
다음으로 끝나다
Set MyComm = Nothing
'첫 번째 레코드 세트에서 값을 가져옵니다.
사용자 이름 = MyRst(0)
'두 번째 레코드 세트에서 값을 가져옵니다.
그렇지 않다면 MyRst는 아무것도 아닙니다.
MyRst = MyRst.NextRecordset() 설정
UserTel = MyRst(0)
사용자 메일 = MyRst(1)
종료하면
Set MyRst = Nothing
위 코드에서 Recordset 개체의 NextRecordset 메서드는 저장 프로시저에서 반환된 여러 레코드 집합을 가져오는 데 사용됩니다.
지금까지 이 기사에서는 ASP가 저장 프로시저를 호출하는 다양한 상황에 대해 비교적 포괄적으로 설명했습니다. 마지막으로 ASP 프로그램에서 여러 저장 프로시저를 호출하는 다양한 방법에 대해 살펴보겠습니다.
ASP 프로그램에서는 최소한 다음 세 가지 방법을 사용하여 여러 저장 프로시저를 호출할 수 있습니다.
1. 여러 Command 개체를 만듭니다.
DIM 마이컴
MyComm = Server.CreateObject("ADODB.Command") 설정
'저장 프로시저 1 호출
...
MyComm = 없음으로 설정
MyComm = Server.CreateObject("ADODB.Command") 설정
'저장 프로시저 2 호출
...
MyComm = 없음으로 설정
......
2. Command 객체만 생성하고, 통화 종료 시 해당 매개변수
DIM MyComm을
지웁니다.
MyComm = Server.CreateObject("ADODB.Command") 설정
'저장 프로시저 1 호출
.....
'매개변수 지우기(매개변수가 3개 있다고 가정)
MyComm.Parameters.delete 2
MyComm.Parameters.삭제 1
MyComm.Parameters.삭제 0
'저장 프로시저 2를 호출하고 매개변수를 지웁니다.
...
Set MyComm = Nothing
이때 주의할 점은 매개변수 삭제 순서가 매개변수 선언 순서와 반대라는 점입니다. 이유는 모르겠습니다.
3. 매개변수 데이터 수집의 새로 고침 메서드를 사용하여 매개변수 개체
DIM MyComm을
재설정합니다.
MyComm = Server.CreateObject("ADODB.Command") 설정
'저장 프로시저 1 호출
.....
'매개변수 데이터 컬렉션에 포함된 모든 매개변수 개체를 재설정합니다.
MyComm.Parameters.Refresh
'저장 프로시저 2 호출
.....
Set MyComm = Nothing
일반적으로 개체를 반복적으로 생성하는 것은 덜 효율적인 방법이라고 여겨지지만 테스트(테스트 도구는 Microsoft Application Center Test) 후에는 예상치 못한 결과가 나타납니다.
방법 2 >= 방법 1 >> 방법 3
방법 2의 실행 속도는 방법 1보다 크거나 같습니다(최대 약 4% 더 높음). 이 두 가지 방법의 실행 속도는 방법 3보다 훨씬 빠릅니다(최대 130%). 매개변수가 많은 경우 방법 1. 그렇지 않은 경우 방법 2를 사용합니다.
ASP에서 저장 프로시저를 호출하는 데 대한 피상적인 경험을 마침내 작성하는 데 하루가 걸렸습니다. 그 중에는 효과만 알 뿐 원인을 모르는 경우도 있고, 틀릴 수도 있지만 이는 모두 저의 개인적인 실천에 의한 것입니다. 독자 여러분, 비판적으로 받아들이시기 바랍니다. 다른 의견이 있으시면 미리 알려주세요.