sp_OACreate(Transact-SQL)
적용 대상: SQL Server
OLE 개체의 인스턴스를 만듭니다.
구문
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