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

时间:2010-01-21 17:57:21

标签: ssis

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

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

有没有人有任何建议或意见?

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

5 个答案:

答案 0 :(得分:7)

SSIS中解决您的问题的一个非常好的功能称为包配置。许多人对如何存储动态服务器/包属性/变量值 - 配置文件,环境变量,sql server或注册表项有不同的看法和/或想法。我个人喜欢在SQL Server中存储所有信息,这是你想要做的。为此,请按照本文中的步骤操作:Package Configuration Steps

答案 1 :(得分:3)

我们使用配置表而不是文件。您首先使用环境变量指向具有配置表的数据库,然后从那里提取所有其他配置。

以下是填充配置表的脚本示例(您将为开发服务器,QA服务器,Prod服务器创建单独的脚本:

--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

答案 2 :(得分:2)

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

此示例适用于Excelfile,但它与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;"

答案 3 :(得分:1)

除了配置文件......

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

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

编辑:

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

答案 4 :(得分:0)

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

如果您计划从SQL Server代理程序执行程序包,则可以指定要在文件路径中使用的配置文件,这通常会考虑我的所有参数要求。

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

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