Transact-SQL 中的 OLE 自动化对象

Transact-SQL 包括一些系统存储过程,这些存储过程允许在 Transact-SQL 批处理、存储过程和触发器中引用 OLE 自动化对象。这些系统存储过程作为扩展存储过程运行,而且通过存储过程执行的 OLE 自动化对象在 SQL Server 数据库引擎实例的地址空间中的运行方式与扩展存储过程的运行方式相同。

OLE 自动化存储过程使 Transact-SQL 批处理能够引用 SQL-DMO 对象和自定义 OLE 自动化对象,例如公开 IDispatch 接口的对象。使用 Microsoft Visual Basic 创建的自定义进程内 OLE 服务器必须有一个用于 Class_Initialize 子例程和 Class_Terminate 子例程的错误处理程序(使用 On Error GoTo 语句指定)。Class_Initialize 子例程和 Class_Terminate 子例程中未处理的错误可能导致不可预知的错误,例如数据库引擎实例的访问冲突。建议其他子例程也有错误处理程序。

当使用 Transact-SQL 中的 OLE 自动化对象时的第一个步骤就是调用 sp_OACreate 系统存储过程在数据库引擎实例的地址空间中创建对象实例。

创建了对象实例后,调用下列存储过程以使用与该对象相关的属性、方法和错误信息:

  • sp_OAGetProperty,获取属性值。

  • sp_OASetProperty,设置属性值。

  • sp_OAMethod,调用方法。

  • sp_OAGetErrorInfo 获取最新的错误信息。

当不再需要对象时,调用 sp_OADestroy 释放使用 sp_OACreate 创建的对象实例。

OLE 自动化对象通过属性值和方法返回数据。而 sp_OAGetPropertysp_OAMethod 以结果集的形式返回这些数据值。

OLE 自动化对象的作用域是一个批处理。对该对象的所有引用都必须包含在单个批处理、存储过程或触发器中。

引用对象时,SQL Server 自动化对象支持从引用的对象遍历至它包含的其他对象。例如,在使用 SQL-DMO SQLServer 对象时,可以引用该服务器上包含的数据库和表。