sp_OACreate (Transact-SQL)
Область применения: SQL Server
Создает экземпляр OLE-объекта.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_OACreate { progid | clsid }
, objecttoken OUTPUT
[ , context ]
[ ; ]
Аргументы
progid
Программный идентификатор (ProgID) создаваемого объекта OLE. Эта строка символов описывает класс объекта OLE и имеет форму: <OLEComponent>.<Object>
OLEComponent — это имя компонента сервера автоматизации OLE, а объект — имя объекта 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
.
objecttoken OUTPUT
Возвращаемый маркер объекта и должен быть локальной переменной типа данных int. Этот маркер объекта определяет созданный объект OLE и используется в вызовах других хранимых процедур OLE Automation.
контекст
Указывает контекст выполнения, в котором запускается созданный OLE-объект. Если задано, это значение должно быть одним из следующих параметров:
1
= только сервер OLE в процессе (.dll
)4
= только локальный (.exe
) СЕРВЕР OLE5
= разрешено как в процессе, так и локальном сервере OLE
Если не задано, по умолчанию используется значение 5
. Это значение передается в качестве параметра dwClsContext вызова CoCreateInstance
.
Если внутрипроцессный сервер OLE разрешен (с помощью контекстного значения 1
или 5
без указания значения контекста), он имеет доступ к памяти и другим ресурсам, принадлежащим SQL Server. Сервер OLE в процессе может повредить память ИЛИ ресурсы SQL Server и привести к непредсказуемым результатам, таким как нарушение доступа к SQL Server.
При указании контекстного 4
значения локальный OLE-сервер не имеет доступа к ресурсам SQL Server и не может повредить память или ресурсы SQL Server.
Примечание.
Аргументы для данной хранимой процедуры указываются по позиции, а не по имени.
Значения кода возврата
0
(успешно) или ненулевое число (сбой), которое является целым значением HRESULT, возвращаемым объектом OLE Automation.
Дополнительные сведения о кодах возврата HRESULT см. в разделе "Коды возврата автоматизации OLE" и сведения об ошибках.
Замечания
Если включены процедуры автоматизации OLE, вызов sp_OACreate
для запуска общей среды выполнения OLE Automation. Дополнительные сведения о включении автоматизации OLE см. в статье Ole Automation Procedures (параметр конфигурации сервера).
Созданный объект OLE автоматически уничтожается в конце пакета инструкций Transact-SQL.
Разрешения
Требуется членство в предопределенных ролях сервера sysadmin или разрешение на выполнение непосредственно в этой хранимой процедуре. Параметр конфигурации сервера Ole Automation Procedures должен быть включен для использования любой системной процедуры, связанной с OLE Automation.
Примеры
А. Использование 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 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
В следующем примере создается объект 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 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