如何使SSIS包中的服务器名称动态

如何使SSIS包中的服务器名称动态,ssis,Ssis,我有许多SSIS包,它们都连接到同一个数据库。我不想将服务器名称硬编码到每个数据库中的db连接中,因为它与dev-to-live服务器不同。这些服务器名称可能会随着时间的推移而改变 我知道您可以将其放在配置文件中,但所有这些SSIS包都存储在SQL Server 2008中,我希望将所有详细信息保留在SQL Server中 有人有什么建议或建议吗 我正在考虑创建一个名为GetServerName的包,该包返回服务器名,我可以用它来更改每个包中的连接。但是可能有更好的方法。我发现配置文件是一种非常

我有许多SSIS包,它们都连接到同一个数据库。我不想将服务器名称硬编码到每个数据库中的db连接中,因为它与dev-to-live服务器不同。这些服务器名称可能会随着时间的推移而改变

我知道您可以将其放在配置文件中,但所有这些SSIS包都存储在SQL Server 2008中,我希望将所有详细信息保留在SQL Server中

有人有什么建议或建议吗


我正在考虑创建一个名为GetServerName的包,该包返回服务器名,我可以用它来更改每个包中的连接。但是可能有更好的方法。

我发现配置文件是一种非常方便的方法

如果计划从SQLServer代理执行包,则可以从文件路径指定要使用的配置文件,这通常会满足我的所有参数要求

如果要将结果保存在SQL Server中,可以将其存储在表中并检索它们。但是现在,您必须知道Dev/Test/Prod要与哪个服务器/表对抗,然后回到原来的问题


我的建议是:在所有服务器(Dev/Test/Prod)的同一物理位置上都有一个配置文件,并让作业指向相应的参数配置文件。

我使用具有活动服务器名称的查询中的服务器名称填充变量。然后在脚本任务中,我只需更改连接字符串

此示例适用于Excel文件,但与sql连接非常相似

    Dts.Connections("ExcelConnection").ConnectionString = 
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\" +

 Dts.Variables("ActiveServerName").Value.ToString + "\Summary_" + 

Dts.Variables("FileDate").Value.ToString + 
".xls;Extended Properties=Excel 8.0;HDR=YES;"

SSIS中的一个很好的特性就是包配置,它可以解决您的这类问题。对于如何存储动态服务器/包属性/变量值配置文件、环境变量、sql server或注册表项,许多人有不同的观点和/或想法。我个人喜欢将所有信息存储在SQL Server中,这正是您想要做的。要实现这一点,请遵循本文中的步骤:

除了配置文件之外

您可以定义一个变量,该变量可以通过命令行设置,也可以在批处理作业或SQL Server代理作业中设置。可以将变量替换为服务器名称(通过表达式IIRC)

如果您想要单文件部署,这将非常有用

编辑:


:(抱歉,SQL Server Central需要注册)

我们使用的是配置表而不是文件。从一个环境变量开始,指向配置表中的数据库,然后从中提取所有其他配置

下面是一个用于填充配置表的脚本示例(您将为dev server、QA server、Prod server创建一个单独的脚本:

--connections
--for MyDatabaseName
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', 'Data Source=MYSQLSERVER;Initial Catalog=MyDatabaseName;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;', 'Package.Connections[MyDatabaseName].Properties[ConnectionString]' , 'String' )

--variables
--FilePathImportServer
INSERT INTO MyDatabase.dbo.SSISConfig VALUES (
'MyConfigurationName', '\\MYSERVER\SOMECLIENT\Import\', '\Package.Variables[User::FilePathImportServer].Properties[Value]' , 'String' )

--select * from SSISConfig where configurationFilter = MyConfigurationName

这很好。我们使用SSI进行专门的数据加载,并传入db连接信息,因为这对于每个客户的安装都是唯一的。