SSIS 执行 SQL 任务
执行 SQL 任务从包中运行 SQL 语句或存储过程。此任务可以包含单个 SQL 语句,也可以包含按顺序运行的多个 SQL 语句。可以将执行 SQL 任务用于下列用途:
截断表或视图,以便为插入数据作准备。
创建、更改和删除数据库对象(如表和视图)。
在向事实数据表和维度表加载数据之前,重新创建这些表。
运行存储过程。
将查询返回的行集保存到变量中。
可以按照下列方式配置执行 SQL 任务:
指定用于连接到数据库的连接管理器的类型。
指定 SQL 语句返回的结果集的类型。
指定 SQL 语句的超时值。
指定 SQL 语句的源。
指明任务是否跳过 SQL 语句的准备阶段。
如果使用 ADO 连接类型,则必须指明 SQL 语句是否为存储过程。对于其他的连接类型,该属性为只读且其值始终为 false。
执行 SQL 任务可以与 Foreach 循环和 For 循环容器一起组合使用,以运行多个 SQL 语句。这些容器在包中实现重复运行控制流,并可重复运行执行 SQL 任务。例如,包可以使用 Foreach 循环容器来枚举文件夹中的文件,并重复运行执行 SQL 任务来执行存储在各个文件中的 SQL 语句。
通过执行 SQL 任务来连接到数据源
执行 SQL 任务可使用不同类型的连接管理器来连接到在其中运行 SQL 语句或存储过程的数据源。此任务可使用下表中列出的连接类型。
连接类型 |
连接管理器 |
---|---|
EXCEL |
|
OLE DB |
|
ODBC |
|
ADO |
|
ADO.NET |
|
SQLMOBILE |
创建执行 SQL 任务使用的 SQL 语句
此任务使用的 SQL 语句的源可以是包含语句的任务属性、到包含一个或多个语句的文件的连接,或者是包含语句的变量的名称。必须用源数据库管理系统 (DBMS) 的方言编写 SQL 语句。有关详细信息,请参阅在包中使用查询。
如果 SQL 语句存储在某个文件中,则该任务使用文件连接管理器来连接到该文件。有关详细信息,请参阅文件连接管理器。
在 SSIS 设计器中,可以使用**“执行 SQL 任务编辑器”对话框来键入 SQL 语句,也可使用“查询生成器”**(用于创建 SQL 查询的图形用户界面)键入。有关详细信息,请参阅执行 SQL 任务编辑器(“常规”页)和查询生成器。
注意 |
---|
执行 SQL 任务可能无法成功分析在执行 SQL 任务外编写的有效 SQL 语句。 |
使用执行 SQL 任务在批处理中发送多个语句
如果在执行 SQL 任务中包含了多个语句,则可以将这些语句进行分组,并将它们作为一批来运行。若要标明批的结束,请使用 GO 命令。在两个 GO 命令间的所有 SQL 语句都作为一批发送到 OLE DB 访问接口来运行。SQL 命令可以包含多个由 GO 命令分隔的批。
对可以分组到批的 SQL 语句类型有一些限制。有关详细信息,请参阅 语句的批处理。
如果执行 SQL 任务运行一个 SQL 语句批,则下列规则适用于批:
只有一个语句可以返回结果集,且该语句必须是批中的第一个语句。
如果结果集使用结果绑定,则查询必须返回相同数量的列。如果查询返回不同数量的列,则任务失败。但是,即使任务失败,其运行的查询(如 DELETE 或 INSERT 查询)也可能成功。
如果结果绑定使用列名,则查询必须返回与任务中使用的结果集具有相同名称的列。如果缺少列,则任务失败。
如果任务使用参数绑定,则批中的所有查询都必须具有相同数量和类型的参数。
使用执行 SQL 任务运行参数化的 SQL 命令
SQL 语句和存储过程常常使用输入参数、输出参数和返回代码。执行 SQL 任务支持 Input、Output 和 ReturnValue 参数类型。应当将 Input 类型用于输入参数,将 Output 用于输出参数并将 ReturnValue 用于返回代码。
注意 |
---|
只有数据访问接口支持这些参数时,才可在执行 SQL 任务中使用它们。 |
有关在执行 SQL 任务中使用参数和返回代码的信息,请参阅在执行 SQL 任务中使用参数和返回代码。
为执行 SQL 任务指定结果集类型
执行 SQL 任务可能有结果集返回也可能没有结果集返回,这取决于 SQL 命令的类型。例如,SELECT 语句通常返回结果集,而 INSERT 语句通常不返回结果集。SELECT 语句所返回的结果集可包含零行、单行或多行。存储过程还可返回指示过程的执行状态的整数值(称为返回代码)。这种情况下,结果集由单行组成。
有关从执行 SQL 任务的 SQL 命令中检索结果集的信息,请参阅在执行 SQL 任务中使用结果集。
对执行 SQL 任务可用的自定义日志项
下表介绍了执行 SQL 任务的自定义日志项。有关详细信息,请参阅在包中实现日志记录和日志记录的自定义消息。
日志项 |
说明 |
---|---|
ExecuteSQLExecutingQuery |
提供有关 SQL 语句的执行阶段的信息。在任务获得与数据库的连接时、任务开始准备 SQL 语句时以及执行完 SQL 语句之后写入日志项。准备阶段的日志项包括任务所使用的 SQL 语句。 |
执行 SQL 任务故障排除
可以记录执行 SQL 任务对外部数据访问接口的调用。您可以使用这项日志记录功能对执行 SQL 任务运行的 SQL 命令进行故障排除。若要记录执行 SQL 任务对外部数据访问接口的调用,请在包级别启用包日志记录并选择**“诊断”**事件。有关详细信息,请参阅包执行故障排除。
有时,SQL 命令或存储过程会返回多个结果集。这些结果集不仅包含 SELECT 查询结果的行集,还包含 RAISERROR 或 PRINT 语句的错误结果的单个值。该任务是否忽略第一个结果集之后出现的结果集中的错误,取决于所用的连接管理器类型:
在您使用 OLE DB 和 ADO 连接管理器时,该任务会忽略在第一个结果集之后出现的结果集。因此,使用这些连接管理器,当错误不属于第一个结果集时,该任务会忽略 SQL 命令或存储过程返回的错误。
在您使用 ODBC 和 ADO.NET 连接管理器时,该任务不会忽略在第一个结果集之后出现的结果集。使用这些连接管理器,当第一个结果集以外的结果集中包含错误时,该任务将失败并出现错误。
配置执行 SQL 任务
可以采用编程方式或通过 SSIS 设计器来设置属性。
有关可以在 SSIS 设计器中设置的属性的详细信息,请单击下列主题之一:
有关如何在 SSIS 设计器中设置这些属性的详细信息,请单击以下主题:
以编程方式配置执行 SQL 任务
有关以编程方式设置这些属性的详细信息,请单击以下主题:
|