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