如何在ssis执行sql任务中动态传递数据库名称

问题描述 投票:0回答:2

我的服务器中有多个数据库。因此,服务器上的每个数据库都有多个连接管理器。 想在executesql任务中传递数据库名称作为参数,这样我就可以减少连接管理器的数量。 像下面这样的东西是最可取的,

use ? 
select * from tablename 
dynamic ssis database-connection ssis-connection-manager
2个回答
0
投票

您应该能够使用多部分数据库命名约定。 “使用数据库”只是更改连接的上下文。选择您最常使用的数据库作为默认值,然后使用以下内容:

从databasename.schema.tablename中选择column1、column2

如果您设置了链接服务器,您甚至可以跨服务器使用它。 (4部分命名)

从linkedserver.databasename.schema.tablename中选择column1、column2


0
投票

这样我就可以减少连接管理器的数量。

我强烈建议使用 SSIS Catalog 来实现更集中的管理方法,并考虑利用 SSIS 环境变量来减少对多个连接管理器的需求。


use ? 
select * from tablename 

对于任何试图实现与问题中提供的示例类似的目标的人:

这里有另一种方法:

  1. 创建项目参数:在 Project.params 中设置要从不同 SSIS 目录动态传递的变量(示例名称:DynamicDBName)。您可以使用其他方法来设置 DynamicDBName 变量,具体取决于您的用途。

  2. 创建包参数:在您的包下,创建一个数据类型设置为 String 的变量(示例名称:DynamicDBSelectStatement)。请参考下图。 enter image description here

  3. 修改变量表达式:将sql语句写入DynamicDBSelectStatement变量下的表达式以利用项目变量。例如:

    "use " +  @[Project::DynamicDBName] + " select * from tablename"

  4. 执行SQL任务配置:最后,确保执行SQL任务设置为

    SQLSourceType = Variable
    和包含动态SQL语句的
    SourceVariable = DynamicDBSelectStatement
    变量。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.