sp_OACreate (Transact-SQL)
Создает экземпляр OLE-объекта.
Синтаксис
sp_OACreate { progid | clsid } , objecttoken OUTPUT [ , context ]
Аргументы
progid
Программный идентификатор (ProgID) создаваемого OLE-объекта. Данная строка символов описывает класс OLE-объекта и имеет следующий вид: 'OLEComponent.Object'OLEComponent — это имя компонента сервера OLE-автоматизации, а Object — это имя OLE-объекта. Указанный OLE-объект должен быть допустимым и должен поддерживать интерфейс IDispatch.
Например, SQLDMO.SQLServer — это идентификатор ProgID объекта SQL-DMO SQLServer. Имя компонента SQL-DMO — SQLDMO, объект SQLServer допустим, и, как и все объекты SQL-DMO, объект SQLServer поддерживает интерфейс IDispatch.
clsid
Идентификатор класса (CLSID) создаваемого OLE-объекта. Данная строка символов описывает класс OLE-объекта и имеет следующий вид: nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn Указанный OLE-объект должен быть допустимым и должен поддерживать интерфейс IDispatch.Например, {00026BA1-0000-0000-C000-000000000046} — это CLSID объекта SQL-DMO SQLServer.
objecttokenOUTPUT
Возвращаемый маркер объекта, должен быть локальной переменной типа int. Маркер объекта идентифицирует созданный OLE-объект и используется в вызовах других хранимых процедур OLE-автоматизации.context
Указывает контекст выполнения, в котором запускается созданный OLE-объект. Если аргумент указан, то его значение должно быть одним из следующих:1 = только внутрипроцессный OLE-сервер (DLL);
4 = только локальный OLE-сервер (EXE);
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-автоматизации. Дополнительные сведения о включении OLE-автоматизации см. в разделе Параметр Ole Automation Procedures.
Созданный OLE-объект автоматически уничтожается по завершении пакета инструкций языка Transact-SQL.
Разрешения
Необходимо членство в предопределенной роли сервера sysadmin.
Примеры
А. Использование идентификатора 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
Б. Использование идентификатора 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
См. также