sp_OACreate(Transact-SQL)
OLE 개체의 인스턴스를 만듭니다.
구문
sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ]
인수
progid
만들 OLE개체의 ProgID(프로그래밍 식별자)입니다. 이 문자열은 OLE 개체의 클래스를 설명하며 'OLEComponent.Object' 형식으로 되어 있습니다.OLEComponent는 OLE 자동화 서버의 구성 요소 이름이며 Object는 OLE 개체의 이름입니다. 지정한 OLE 개체는 유효해야 하며 IDispatch 인터페이스를 지원해야 합니다.
예를 들어 SQLDMO.SQLServer는 SQL-DMO SQLServer 개체의 ProgID입니다. SQL-DMO의 구성 요소 이름은 SQLDMO이고 SQLServer 개체는 유효하며 SQLServer 개체는 모든 SQL-DMO 개체와 마찬가지로 IDispatch를 지원합니다.
clsid
만들 OLE 개체의 CLSID(클래스 식별자)입니다. 이 문자열은 OLE 개체의 클래스를 설명하며 '{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}' 형식으로 되어 있습니다. 지정한 OLE 개체는 유효해야 하며 IDispatch 인터페이스를 지원해야 합니다.예를 들어 {00026BA1-0000-0000-C000-000000000046}은 SQL-DMO SQLServer 개체의 CLSID입니다.
objecttokenOUTPUT
반환된 개체 토큰이며 int 데이터 형식의 로컬 변수여야 합니다. 이 개체 토큰은 만들어진 OLE 개체를 식별하고 다른 OLE 자동화 저장 프로시저 호출에 사용됩니다.context
새로 만든 OLE 개체가 실행되는 실행 컨텍스트를 지정합니다. 지정되는 경우 다음 값 중 하나여야 합니다.1 = In-process(.dll) OLE 서버만 해당
4 = 로컬(.exe) OLE 서버만 해당
5 = in-process 및 로컬 OLE 서버 모두 허용
지정하지 않으면 기본값은 5입니다. 이 값은 CoCreateInstance에 대한 호출의 dwClsContext 매개 변수로 전달됩니다.
1 또는 5의 컨텍스트 값을 사용하거나 컨텍스트 값을 지정하지 않아 in-process OLE 서버가 허용되는 경우 해당 서버는 SQL Server에서 소유하는 메모리 및 다른 리소스에 액세스할 수 있습니다. in-process OLE 서버는 SQL Server 메모리 또는 리소스를 손상시켜 SQL Server 액세스 위반과 같은 예기치 못한 결과를 초래할 수도 있습니다.
컨텍스트 값을 4로 지정하는 경우 로컬 OLE 서버는 SQL Server 리소스에 액세스할 수 없으며 SQL Server 메모리 또는 리소스를 손상시킬 수 없습니다.
[!참고]
이 저장 프로시저의 매개 변수는 이름이 아니라 위치로 지정됩니다.
반환 코드 값
0(성공) 또는 0이 아닌 숫자(실패)이며 OLE 자동화 개체가 반환한 HRESULT의 정수 값입니다.
HRESULT 반환 코드에 대한 자세한 내용은 OLE 자동화 반환 코드 및 오류 정보를 참조하십시오.
주의
OLE 자동화 프로시저가 설정되어 있는 경우 sp_OACreate를 호출하면 OLE 자동화 공유 실행 환경이 시작됩니다. OLE 자동화를 설정하는 방법은 Ole Automation Procedures 옵션을 참조하십시오.
만들어진 OLE 개체는 Transact-SQL 문 일괄 처리의 끝 부분에서 자동으로 삭제됩니다.
사용 권한
sysadmin 고정 서버 역할의 멤버여야 합니다.
예
1. 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 OUT;
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
RETURN
END;
GO
2. 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 OUT;
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
raiserror('Error Creating COM Component 0x%x, %s, %s',16,1, @hr, @src, @desc)
RETURN
END;
GO