sp_OACreate (Transact-SQL)

Применимо к:SQL Server

Создает экземпляр OLE-объекта.

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

progid
Программный идентификатор (ProgID) создаваемого OLE-объекта. Эта символьная строка описывает класс объекта OLE и имеет форму: OLEComponent.Объект'

OLEComponent — это имя компонента сервера автоматизации OLE, а объект — имя объекта OLE. Указанный объект OLE должен быть допустимым и должен поддерживать интерфейс IDispatch .

Например, SQLDMO. SQLServer — это progID объекта SQL-DMO SQLServer . SQL-DMO имеет имя компонента SQLDMO, объект SQLServer действителен, и (как и все объекты SQL-DMO), объект SQLServer поддерживает IDispatch.

Clsid
Идентификатор класса (CLSID) создаваемого OLE-объекта. Эта строка символов описывает класс объекта OLE и имеет форму: "{nn-nnnn-nnnn-nnnn-nn}". Указанный объект OLE должен быть допустимым и должен поддерживать интерфейс IDispatch .

Например, {00026BA1-0000-0000-C000-0000000046} является CLSID объекта SQL-DMO SQLServer .

objecttokenOUTPUT
Является возвращаемым маркером объекта и должен быть локальной переменной типа данных int. Этот маркер объекта определяет созданный объект OLE и используется в вызовах других хранимых процедур OLE Automation.

контекст
Указывает контекст выполнения, в котором запускается созданный OLE-объект. Если аргумент указан, то его значение должно быть одним из следующих:

1 = только сервер OLE в процессе (DLL).

4 = только локальный (EXE-файл) OLE-сервер.

5 = разрешено как внутри процесса, так и локальный сервер OLE

Если значение по умолчанию не указано, значение по умолчанию равно 5. Это значение передается в качестве параметра dwClsContext вызова CoCreateInstance.

Если внутрипроцессный сервер OLE разрешен (с помощью контекстного значения 1 или 5 или не указывая значение контекста), он имеет доступ к памяти и другим ресурсам, принадлежащим SQL Server. Сервер OLE в процессе может повредить память ИЛИ ресурсы SQL Server и привести к непредсказуемым результатам, таким как нарушение доступа к SQL Server.

Если указать значение контекста 4, локальный сервер OLE не имеет доступа к каким-либо ресурсам SQL Server, и он не может повредить память или ресурсы SQL Server.

Примечание.

Аргументы для данной хранимой процедуры указываются по позиции, а не по имени.

Значения кода возврата

0 (успешное завершение) или ненулевое число (неуспешное завершение), которое является целочисленным значением типа HRESULT, возвращаемого объектом OLE-автоматизации.

Дополнительные сведения о кодах возврата HRESULT см. в разделе "Коды возврата автоматизации OLE" и сведения об ошибках.

Замечания

Если включены процедуры автоматизации OLE, вызов sp_OACreate запустит общую среду выполнения OLE Automation. Дополнительные сведения о включении автоматизации OLE см. в разделе "Параметр конфигурации сервера процедур ole automation".

Созданный объект OLE автоматически уничтожается в конце пакета инструкций Transact-SQL.

Разрешения

Требуется членство в предопределенных ролях сервера sysadmin или разрешение на выполнение непосредственно в этой хранимой процедуре. Ole Automation Procedures Необходимо включить настройку для использования любой системной процедуры, связанной с автоматизацией OLE.

Примеры

А. Использование идентификатора ProgID

В следующем примере создается объект SQL-DMO SQLServer с помощью progID.

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  

B. Использование идентификатора CLSID

В следующем примере создается объект SQL-DMO SQLServer с помощью clSID.

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  

См. также

Хранимые процедуры OLE Automation (Transact-SQL)
Параметр конфигурации сервера «Ole Automation Procedures»
Пример скрипта OLE-автоматизации