OLE DB 源

更新日期: 2007 年 9 月 15 日

OLE DB 源通过使用数据库表、视图或 SQL 命令,从各种兼容 OLE DB 的关系数据库中提取数据。 例如,OLE DB 源可以从 Microsoft Access 或 SQL Server 数据库的表中提取数据。

ms141696.note(zh-cn,SQL.90).gif注意:
若要从使用 Microsoft Office Excel 2007 的数据源加载数据,请使用 OLE DB 源。 使用 Excel 源无法从 Excel 2007 数据源加载数据。 有关详细信息,请参阅 OLE DB 连接管理器。 若要从使用 Microsoft Office Excel 2003 或更低版本的数据源加载数据,请使用 Excel 源。 有关详细信息,请参阅 Excel 源

OLE DB 源提供四种不同数据访问模式用于提取数据:

  • 表或视图。
  • 变量中指定的表或视图。
  • SQL 语句的运行结果。 查询可以是参数化查询。
  • 存储在变量中的 SQL 语句的运行结果。

如果使用参数化查询,则可以将变量映射到参数,以便在 SQL 语句中指定单个参数的值。

这个源使用 OLE DB 连接管理器连接到数据源,而该连接管理器则指定要使用的 OLE DB 访问接口。 有关详细信息,请参阅 OLE DB 连接管理器

Integration Services 项目也提供可据以创建 OLE DB 连接管理器的数据源对象,从而使 OLE DB 源可以使用数据源和数据源视图。 有关详细信息,请参阅数据源 (SSIS)数据源视图 (SSIS)

根据不同的 OLE DB 访问接口,对 OLE DB 源存在一些限制:

  • Microsoft OLE DB Provider for Oracle 不支持 Oracle 数据类型 BLOB、CLOB、NCLOB、BFILE 或 UROWID,因此,OLE DB 源不能从包含这些数据类型列的表中提取数据。
  • IBM OLE DB DB2 访问接口和 Microsoft OLE DB DB2 访问接口不支持使用调用存储过程的 SQL 命令。 如果使用这种命令,OLE DB 源将无法创建列元数据,这样一来,数据流中 OLE DB 源之后的数据流组件将没有可用的列数据,从而导致数据流执行失败。

OLE DB 源有一个常规输出和一个错误输出。

使用参数化 SQL 语句

OLE DB 源可以使用 SQL 语句来提取数据。 此语句可以是 SELECT 或 EXEC 语句。

OLE DB 源使用 OLE DB 连接管理器来连接到它从中提取数据的数据源。 取决于 OLE DB 连接管理器所使用的访问接口和连接管理器所连接的关系数据库管理系统 (RDBMS),参数的命名和列出将应用不同的规则。 如果参数名是从 RDBMS 返回的,则可以使用参数名来将参数列表中的参数映射到 SQL 语句中的参数;否则,参数将按它们在参数列表中的序数位置映射到 SQL 语句中的参数。 支持的参数名类型按访问接口而各不相同。 例如,某些访问接口要求使用变量或列名称,而某些访问接口则要求使用诸如 0 或 Param0 这样的符号名称。 应当参阅访问接口对应的文档,了解有关在 SQL 语句中使用的参数名称的信息。

使用 OLE DB 连接管理器时,不能使用参数化的子查询,因为 OLE DB 源无法通过 OLE DB 访问接口派生参数信息。 但是,可以使用表达式连接参数值与查询字符串并设置源的 SqlCommand 属性。

在 SSIS 设计器中,可以通过使用**“OLE DB 源编辑器”对话框来配置 OLE DB 源,并在“设置查询参数”**对话框中将参数映射到变量。

使用序号位置指定参数

如果没有返回参数名,则**“设置查询参数”对话框中的“参数”**列表中的参数列出顺序将控制运行时参数将映射哪个参数标记。 列表中的第一个参数将映射到 SQL 语句中的第一个 ?,第二个参数映射到第二个 ?,以此类推。

以下 SQL 语句选择 AdventureWorks 数据库的 Product 表中的行。 Mappings 列表中的第一个参数映射到 Color 列的第一个参数,第二个参数映射到 Size 列。

SELECT * FROM Production.Product WHERE Color = ? AND Size = ?

参数名不受影响。 例如,如果参数与它所应用的列同名,但在**“参数”**列表中没有放在正确的序号位置,则在运行时发生的参数映射将使用参数的序号位置,而不是参数名称。

EXEC 命令通常要求在过程中使用提供参数值的变量的名称作为参数名称。

使用名称来指定参数

如果实际参数名称是从 RDBMS 返回的,则 SELECT 和 EXEC 语句所使用的参数将按名称进行映射。 参数名称必须与存储过程(由 SELECT 语句或 EXEC 语句运行)所期望的名称匹配。

以下 SQL 语句运行 uspGetWhereUsedProductID 存储过程(在 AdventureWorks 数据库中可用)。

EXEC uspGetWhereUsedProductID ?, ?

存储过程希望变量 @StartProductID@CheckDate 提供参数值。 参数出现在**“映射”列表中的顺序是不相关的。 唯一的要求是,在存储过程中参数名要与变量名匹配,包括 @ 符号。 参数出现在“映射”**列表中的顺序是不相关的。

将参数映射到变量

在运行时参数将映射到提供参数值的变量。 尽管也可以使用 Integration Services 提供的系统变量,但变量通常是用户定义变量。 如果使用用户定义变量,请确保将数据类型设置为与映射参数所引用的列的数据类型相兼容的类型。 有关详细信息,请参阅 Integration Services 变量

OLE DB 源故障排除

如果是在 Microsoft SQL Server 2005 Service Pack 2 (SP2) 中启动,则能够记录 OLE DB 源对外部数据访问接口所做的调用。 您可以使用这项新的日志记录功能,对 OLE DB 源执行的从外部数据源加载数据进行故障排除。 若要记录 OLE DB 源对外部数据访问接口所做的调用,请在包级别启用包日志记录并选择**“诊断”**事件。 有关详细信息,请参阅包执行故障排除

配置 OLE DB 源

可以采用编程方式或通过 SSIS 设计器来设置属性。

有关可以在**“OLE DB 源编辑器”**对话框中设置的属性的详细信息,请单击下列主题之一:

**“高级编辑器”对话框反映了可以通过编程方式进行设置的属性。 有关可以在“高级编辑器”**对话框中或以编程方式设置的属性的详细信息,请单击下列主题之一:

有关如何设置属性的详细信息,请单击下列主题之一:

请参阅

概念

OLE DB 目标
Integration Services 变量
创建包数据流

其他资源

Integration Services 源

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

新增内容:
  • 解释了 OLE DB 连接管理器为何不能使用参数化的子查询。

2006 年 12 月 12 日

新增内容:
  • 添加了有关使用 Excel 2007 数据源的说明。
  • 添加了有关 SQL Server 2005 SP2 如何包括新日志记录消息的信息。使用这些消息,用户可以对此源对外部数据访问接口所做的调用进行故障排除。

2005 年 12 月 5 日

新增内容:
  • 添加了有关使用参数化 SQL 语句的信息。