sqlserver 저장 프로 세 스 문법 상세 설명

저장 과정 은 실행 가능 한 대상 으로 데이터베이스 에 저장 되 는 하나 이상 의 SQL 명령 입 니 다.정 의 는 항상 추상 적 이다.저장 과정 은 사실 일정한 조작 을 완성 할 수 있 는 SQL 문장 입 니 다.단지 이 문장 은 데이터베이스 에 놓 여 있 을 뿐 입 니 다.(여기 서 우 리 는 SQL Server 만 이야기 합 니 다.)만약 에 우리 가 저장 과정 을 만 들 고 ASP 에서 저장 과정 을 호출 하면 SQL 문 구 를 ASP 코드 와 혼합 하 는 것 을 피 할 수 있 습 니 다.이렇게 하 는 장점 은 적어도 세 가지 가 있다.첫째,효율 을 크게 향상 시킨다.저장 프로 세 스 자체 의 실행 속도 가 매우 빠 르 고 저장 프로 세 스 를 호출 하면 데이터베이스 와 의 상호작용 횟수 를 크게 줄 일 수 있다.둘째,안전성 을 향상 시킨다.만약 에 SQL 문 구 를 ASP 코드 에 혼합 하면 코드 가 비밀 로 되 지 않 으 면 라 이브 러 리 구조 가 비밀 로 되 어 있다 는 것 을 의미한다.셋째,SQL 문장의 중용 에 유리 하 다.ASP 에서 일반적으로 command 대상 을 통 해 저장 과정 을 호출 하고 상황 에 따라 본 고 는 다른 호출 방법 을 소개 한다.설명 을 편리 하 게 하기 위해 저장 과정의 입 출력 에 따라 다음 과 같은 간단 한 분 류 를 한다.1.단일 기록 집합 으로 돌아 가 는 저장 과정 가설 은 다음 과 같은 저장 과정 이 있다(본 고의 목적 은 T-SQL 문법 을 설명 하 는 것 이 아니 기 때문에 저장 과정 은 코드 만 제시 하고 설명 하지 않 는 다).

/*SP1*/
    CREATE PROCEDURE dbo.getUserList
    as
    set nocount on
    begin
       select * from dbo.[userinfo]
    end
    go
이상 저장 과정 에서 userinfo 표 의 모든 기록 을 얻 고 기록 집합 을 되 돌려 줍 니 다.command 대상 을 통 해 이 저장 과정의 ASP 코드 를 다음 과 같이 호출 합 니 다.

'** Command **
DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr  'MyConStr
MyComm.CommandText  = "getUserList" '
MyComm.CommandType  = 4 '
MyComm.Prepared = true  ' SQL
Set MyRst = MyComm.Execute
Set MyComm = Nothing
저장 프로 세 스 에서 얻 은 기록 집합 은 MyRst 에 부여 되 며,다음은 MyRst 를 조작 할 수 있 습 니 다.상기 코드 에서 CommandType 속성 은 요청 한 유형 을 표시 하고 값 을 추출 하 며 다음 과 같이 설명 합 니 다.-1   CommandText 인자 의 종 류 를 정할 수 없 음 을 표시 합 니 다.
1.CommandText 가 일반적인 명령 형식 임 을 나타 낸다.2.CommandText 매개 변 수 는 존재 하 는 표 이름 임 을 나타 낸다.4.CommandText 매개 변 수 는 저장 과정의 이름 이 고 Connection 대상 이나 Recordset 대상 을 통 해 저장 과정 을 호출 할 수 있다.방법 은 다음 과 같다.

'** Connection **
DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr'MyConStr
Set MyRst  = MyConn.Execute("getUserList",0,4)  ' CommandType
Set 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
begin
delete from dbo.[userinfo]
end
go
이 저장 과정 은 userinfo 표 의 모든 기록 을 삭제 합 니 다.입력 과 출력 이 없습니다.호출 방법 은 위 에서 말 한 것 과 대체적으로 같 습 니 다.기록 집합 을 얻 지 않 아 도 됩 니 다.

'** Command **
DIM MyComm
Set 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*/
    CREATE PROCEDURE dbo.delUserAll
    as
    set nocount on
    begin
       BEGIN TRANSACTION
       delete from dbo.[userinfo]
       IF @@error=0
          begin
             COMMIT TRANSACTION
             return 1
          end
       ELSE
          begin
             ROLLBACK TRANSACTION
             return 0
          end       
       return
    end
    go
이상 저장 과정 은 delete 가 순조롭게 실 행 될 때 1 을 되 돌려 줍 니 다.그렇지 않 으 면 0 을 되 돌려 주 고 스크롤 백 작업 을 합 니 다.ASP 에서 반환 값 을 얻 기 위해 서 는 Parameters 집합 을 이용 하여 인 자 를 설명 해 야 합 니 다.

'** **
    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.Create Parameter("RETURN",2,4)에서 각 매개 변수의 의 미 는 다음 과 같다.첫 번 째 매개 변수("RETURE")는 매개 변수 이름 이다.매개 변수 이름 은 임의로 설정 할 수 있 지만 저장 과정 에서 설명 한 매개 변수 이름과 같 아야 합 니 다.여 기 는 반환 값 입 니 다.저 는 습관 적 으로'RETURE'로 설정 합 니 다.두 번 째 매개 변수(2)는 이 매개 변수의 데이터 형식 을 나타 내 고 구체 적 인 유형 코드 는 ADO 참고 를 참조 하 십시오.다음은 자주 사용 하 는 유형 코드 를 제시 합 니 다.

adBigInt: 20 ;
    adBinary : 128 ;
    adBoolean: 11 ;
    adChar: 129 ;
    adDBTimeStamp: 135 ;
    adEmpty: 0 ;
    adInteger: 3 ;
    adSmallInt: 2 ;
    adTinyInt: 16 ;
    adVarChar: 200 ;
반환 값 에 대해 서 는 성형 만 할 수 있 고-1 부터-99 까지 는 보존 값 입 니 다.세 번 째 매개 변수(4)는 매개 변수의 성질 을 나타 내 는데 여기 4 는 이것 이 반환 값 임 을 나타 낸다.이 매개 변수 값 의 설명 은 다음 과 같 습 니 다.0:형식 을 확인 할 수 없습니다.1:매개 변 수 를 입력 하 십시오.2:매개 변 수 를 입력 하 십시오.3:입력 또는 출력 매개 변수;4:반환 값 이상 에서 제 시 된 ASP 코드 는 완전한 코드,즉 가장 복잡 한 코드 라 고 해 야 합 니 다.사실은

Set Mypara = MyComm.CreateParameter("RETURN",2,4)
MyComm.Parameters.Append MyPara
간소화 가능

MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)
심지어 계속 간소화 할 수도 있 고,잠시 후에 설명 할 수도 있다.파 라 메 터 를 저장 하 는 과정 에 대해 서 는 Command 대상 만 호출 할 수 있 습 니 다.
4.입력 매개 변수 와 출력 매개 변수 가 있 는 저장 과정 반환 값 은 특수 한 출력 매개 변수 입 니 다.대부분의 상황 에서 저 희 는 입력 과 출력 매개 변 수 를 동시에 저장 하 는 과정 을 사용 합 니 다.예 를 들 어 저 희 는 사용자 정보 표 에서 특정한 ID 사용자 의 사용자 이름 을 얻 고 싶 습 니 다.이때 입력 매개 변수 인-사용자 ID 와 출력 매개 변수 인-사용자 이름 이 있 습 니 다.이 기능 을 실현 하 는 저장 과정 은 다음 과 같다.

/*SP4*/
    CREATE PROCEDURE dbo.getUserName
       @UserID int,
       @UserName varchar(40) output
    as
    set nocount on
    begin
       if @UserID is null return
       select @UserName=username
           from dbo.[userinfo]

좋은 웹페이지 즐겨찾기