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 .
objecttoken OUTPUT
Является возвращаемым маркером объекта и должен быть локальной переменной типа данных 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-автоматизации
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по