확장 저장 프로시저 만들기

적용 대상:SQL Server

Important

이 기능은 이후 버전의 SQL Server에서 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요. 대신 CLR 통합을 사용하십시오.

확장 저장 프로시저는 프로토타입을 사용하는 C/C++ 함수입니다.

SRVRETCODE xp_extendedProcName **(**SRVPROC *);

접두사 xp_는 필요에 따라 사용할 수 있습니다. 확장 저장 프로시저 이름은 서버에 설치된 코드 페이지/정렬 순서에 관계없이 Transact-SQL 문에서 참조할 때 대/소문자를 구분합니다. DLL을 빌드하는 경우:

  • 진입점이 필요한 경우 DllMain 함수를 작성합니다.

    이 함수는 선택 사항입니다. 소스 코드에서 제공하지 않으면 컴파일러는 TRUE만 반환하는 고유한 버전을 연결합니다. DllMain 함수를 제공하는 경우 스레드 또는 프로세스가 DLL에 연결되거나 DLL에서 분리되면 운영 체제에서 이 함수를 호출합니다.

  • DLL 외부에서 호출된 모든 함수(모든 확장 저장 프로시저 Efunction)는 내보내야 합니다.

    .def 파일의 EXPORTS 섹션에 해당 이름을 나열하여 함수를 내보낼 수 있습니다. 또는 소스 코드의 함수 이름 앞에 microsoft 컴파일러 확장인 __declspec(dllexport)를 접두사로 지정할 수 있습니다(__declspec()는 두 개의 밑줄로 시작합니다.)

확장 저장 프로시저 DLL을 만드는 데 필요한 파일은 다음과 같습니다.

파일 설명
Srv.h 확장 저장 프로시저 API 헤더 파일
Opends60.lib Opends60.dll 라이브러리 가져오기

확장 저장 프로시저 DLL을 만들려면 동적 링크 라이브러리 형식의 프로젝트를 만듭니다. DLL을 만드는 방법에 대한 자세한 내용은 개발 환경 설명서를 참조하세요.

모든 확장 저장 프로시저 DLL은 다음 함수를 구현하고 내보내는 것이 좋습니다.

__declspec(dllexport) ULONG __GetXpVersion()  
{  
   return ODS_VERSION;  
}  

참고 항목

__declspec(dllexport)은 Microsoft 전용 컴파일러 확장입니다. 컴파일러가 이 지시문을 지원하지 않는 경우 EXPORTS 섹션 아래의 DEF 파일에서 이 함수를 내보내야 합니다.

SQL Server가 추적 플래그 -T260으로 시작되거나 시스템 관리자 권한이 있는 사용자가 DBCC TRACEON(260)을 실행하고 확장 저장 프로시저 DLL이 __GetXpVersion()를 지원하지 않는 경우 경고 메시지(오류 8131: 확장 저장 프로시저 DLL '%'가 __GetXpVersion()를 내보내지 않습니다.) 오류 로그에 인쇄됩니다. (__GetXpVersion()는 두 개의 밑줄로 시작합니다.

확장 저장 프로시저 DLL이 __GetXpVersion()를 내보내지만 함수에서 반환된 버전이 서버에서 요구하는 버전보다 작으면 함수에서 반환된 버전과 서버에서 예상한 버전을 나타내는 경고 메시지가 오류 로그에 출력됩니다. 이 메시지가 표시되면 __GetXpVersion()에서 잘못된 값을 반환하거나 이전 버전의 srv.h로 컴파일합니다.

참고 항목

Microsoft Win32 함수인 SetErrorMode는 확장 저장 프로시저에서 호출해서는 안 됩니다.

장기 실행 확장 저장 프로시저는 연결이 중단되거나 일괄 처리가 중단된 경우 프로시저가 자체적으로 종료될 수 있도록 srv_got_attention 주기적으로 호출하는 것이 좋습니다.

확장 저장 프로시저 DLL을 디버그하려면 SQL Server\Binn 디렉터리에 복사합니다. 디버깅 세션의 실행 파일을 지정하려면 Microsoft SQL Server 실행 파일의 경로 및 파일 이름(예: C:\Program Files\Microsoft SQL Server\MSSQL13)을 입력합니다. MSSQLSERVER\MSSQL\Binn\Sqlservr.exe). sqlservr 인수에 대한 자세한 내용은 sqlservr Application을 참조 하세요.

참고 항목

srv_got_attention(확장 저장 프로시저 API)