다음을 통해 공유


sp_OACreate(Transact-SQL)

적용 대상: SQL Server

OLE 개체의 인스턴스를 만듭니다.

Transact-SQL 구문 표기 규칙

구문

sp_OACreate { progid | clsid }
    , objecttoken OUTPUT
    [ , context ]
[ ; ]

인수

progid

만들 OLE 개체의 ProgID(프로그래밍 식별자)입니다. 이 문자열은 OLE 개체의 클래스를 설명하고 다음과 같은 형식 <OLEComponent>.<Object>을 줍니다.

OLEComponent 는 OLE Automation 서버의 구성 요소 이름이며 Object 는 OLE 개체의 이름입니다. 지정된 OLE 개체는 유효해야 하며 인터페이스를 IDispatch 지원해야 합니다.

예를 들어 SQLDMO.SQLServer SQL-DMO SQLServer 개체의 ProgID입니다. SQL-DMO에는 SQLDMO의 구성 요소 이름이 있고 개체 SQLServer 가 유효하며(모든 SQL-DMO 개체와 마찬가지로) 개체가 SQLServer 지원합니다 IDispatch.

clsid

만들 OLE 개체의 CLSID(클래스 식별자)입니다. 이 문자열은 OLE 개체의 클래스를 설명하고 다음과 같은 형식 {<nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn>}을 줍니다. 지정된 OLE 개체는 유효해야 하며 인터페이스를 IDispatch 지원해야 합니다.

예를 들어 {00026BA1-0000-0000-C000-000000000046} SQL-DMO SQLServer 개체의 CLSID입니다.

objecttoken OUTPUT

반환된 개체 토큰이며 데이터 형식 int의 지역 변수여야 합니다. 이 개체 토큰은 생성된 OLE 개체를 식별하고 다른 OLE Automation 저장 프로시저 호출에 사용됩니다.

context

새로 만든 OLE 개체가 실행되는 실행 컨텍스트를 지정합니다. 지정한 경우 이 값은 다음 옵션 중 하나여야 합니다.

  • 1 = In-process(.dll) OLE 서버만 해당
  • 4 = 로컬(.exe) OLE 서버만
  • 5 = In-process 서버와 로컬 OLE 서버 모두 허용됨

지정하지 않으면 기본값 5입니다. 이 값은 호출의 dwClsContext 매개 변수로 전달됩니다 CoCreateInstance.

In-process OLE 서버가 허용되는 경우(컨텍스트 값을 사용하거나 5 컨텍스트 값을 1 지정하지 않음) SQL Server가 소유한 메모리 및 기타 리소스에 액세스할 수 있습니다. In-Process OLE 서버는 SQL Server 메모리 또는 리소스를 손상시키고 SQL Server 액세스 위반과 같은 예측할 수 없는 결과를 초래할 수 있습니다.

컨텍스트 값을 4지정하는 경우 로컬 OLE 서버는 SQL Server 리소스에 액세스할 수 없으며 SQL Server 메모리 또는 리소스를 손상시킬 수 없습니다.

참고 항목

이 저장 프로시저의 매개 변수는 이름이 아니라 위치로 지정됩니다.

반환 코드 값

0 (success) 또는 OLE Automation 개체에서 반환된 HRESULT의 정수 값인 0이 아닌 숫자(실패)입니다.

HRESULT 반환 코드에 대한 자세한 내용은 OLE 자동화 반환 코드 및 오류 정보를 참조하세요.

설명

OLE 자동화 프로시저를 사용하도록 설정하면 OLE Automation 공유 실행 환경을 시작하는 호출 sp_OACreate 이 시작됩니다. OLE 자동화를 사용하도록 설정하는 방법에 대한 자세한 내용은 Ole Automation 프로시저(서버 구성 옵션)를 참조하세요.

만든 OLE 개체는 Transact-SQL 문 일괄 처리가 끝날 때 자동으로 제거됩니다.

사용 권한

sysadmin 고정 서버 역할의 멤버 자격이 필요하거나 이 저장 프로시저에서 직접 권한을 실행해야 합니다. OLE 자동화와 관련된 시스템 프로시저를 사용하려면 Ole Automation Procedures 서버 구성 옵션을 사용하도록 설정해야 합니다.

예제

A. ProgID 사용

다음 예제에서는 ProgID를 사용하여 SQL-DMO SQLServer 개체를 만듭니다.

DECLARE @object INT;
DECLARE @hr INT;
DECLARE @src VARCHAR(255),
    @desc VARCHAR(255);

EXEC @hr = sp_OACreate 'SQLDMO.SQLServer',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object,
        @src OUTPUT,
        @desc OUTPUT

    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);

    RETURN
END;
GO

B. CLSID 사용

다음 예제에서는 CLSID를 사용하여 SQL-DMO SQLServer 개체를 만듭니다.

DECLARE @object INT;
DECLARE @hr INT;
DECLARE @src VARCHAR(255),
    @desc VARCHAR(255);

EXEC @hr = sp_OACreate '{00026BA1-0000-0000-C000-000000000046}',
    @object OUTPUT;

IF @hr <> 0
BEGIN
    EXEC sp_OAGetErrorInfo @object,
        @src OUTPUT,
        @desc OUTPUT

    RAISERROR ('Error Creating COM Component 0x%x, %s, %s', 16, 1, @hr, @src, @desc);

    RETURN
END;
GO