gpt4 book ai didi

sql - 将 SSIS 包配置应用于多个包

转载 作者:行者123 更新时间:2023-12-02 22:35:22 25 4
gpt4 key购买 nike

我有大约 85 个使用相同连接管理器的 SSIS 包。我知道每个包都有自己的连接管理器。我正在尝试确定什么是最好的配置方法,以根据包所在的服务器简单地设置连接管理器的连接字符串。我已经在线访问了各种建议,但在任何地方都找不到可以简单地将配置从一个包复制到其余包的做法。显然有很多方法,例如 XML 文件、SQL Server、环境变量等。

那里的所有文章都指向通过使用 XML 或 SQL 方法来使用间接方法。为什么使用环境变量来保存连接字符串是一种糟糕的方法?

非常感谢任何建议。

谢谢!

最佳答案

为什么使用环境变量来保存连接字符串是一种糟糕的方法?

我发现环境变量或注册表项配置方法受到严重限制,因为它一次只能配置一个项目。对于连接字符串,您需要为给定服务器上的每个目录定义一个环境变量。也许只有 2 或 3 个,这是可以控制的。我们每个数据库实例有 30 多个,而且我们有多实例机器,所以你可以看到这个问题多快会爆发成维护噩梦。将其与基于表或 xml 的方法进行对比,后者可以为给定的配置键保存多个配置项。

...根据包所在的服务器简单地设置连接管理器的连接字符串的最佳配置方法。

如果您选择这条路线,我建议创建一个变量 ConnectionString 并使用它来配置属性。这是一个额外的步骤,但我再次发现调试变量上的复杂表达式比调试属性上的复杂表达式更容易。使用变量,您始终可以在包上弹出断点并查看本地窗口以查看当前值。

创建一个名为 ConnectionString 的变量后,我右键单击它,选择 Properties 并将 EvaluateAsExpression 设置为 True,并将 Expression 属性设置为类似 "Data Source="+ @[System::MachineName] +"\\DEV2012;Initial Catalog=FOO;Provider=SQLNCLI11.1;Integrated Security=SSPI;"

当它被评估时,它会填写当前机器的名称 (DEVSQLA),我将有一个连接到命名实例 DEV2012 的有效 OLE DB 连接字符串。

Data Source=DEVSQLA\DEV2012;Initial Catalog=FOO;Provider=SQLNCLI11.1;Integrated Security=SSPI;

如果您有比一个变量更复杂的配置需求,那么我可以看到您使用它来配置一个连接管理器到一个 sql 表,该表包含所有配置键和值的完整存储库。

...在任何地方都找不到我可以简单地将配置从一个包复制到其余包的做法

我将着手通过编程途径修改所有 80 多岁的包。我们从第三方收到了一批软件包,但他们没有遵循我们的配置和日志记录程序。代码并不难,如果您准确描述为满足您的需求而进行的更改类型,我很乐意将一些代码扔到这个答案上。它可以像下面这样简单。调用该函数后,它将通过将 SSISDB ole 连接管理器上的 sql server 配置添加到名为 default.2008.Sales 的过滤器的名为 dbo.sysdtsconfig 的表来修改包。

string currentPackage = @"C:\Src\Package1.dtsx"

public static void CleanUpPackages(string currentPackage)
{
p = new Package();
p.app.LoadPackage(currentPackage, null);
Configuration c = null;

// Apply configuration Default.2008.Sales
// ConfigurationString => "SSISDB";"[dbo].[sysdtsconfig]";"Default.2008.Sales"
// Name => MyConfiguration
c = p.Configurations.Add();
c.Name = "SalesConfiguration";
c.ConfigurationType = DTSConfigurationType.SqlServer;
c.ConfigurationString = @"""SSISDB"";""[dbo].[sysdtsconfig]"";""Default.2008.Sales""";

app.SaveToXml(sourcePackage, p, null);
}

将变量添加到包中不会占用更多代码。在 cleanup proc 中,添加这样的代码,以将一个新变量添加到具有上述表达式的包中。

string variableName = string.Empty;
bool readOnly = false;
string nameSpace = "User";
string variableValue = string.Empty;
string literalExpression = string.Empty;

variableName = "ConnectionString";
literalExpression = @"""Data Source=""+ @[System::MachineName] +""\\DEV2012;Initial Catalog=FOO;Provider=SQLNCLI11.1;Integrated Security=SSPI;""";

p.Variables.Add(variableName, readOnly, nameSpace, variableValue);
p.Variables[variableName].EvaluateAsExpression = true;
p.Variables[variableName].Expression = literalExpression;

如果我遗漏了什么或者您想澄清任何要点,请告诉我。

关于sql - 将 SSIS 包配置应用于多个包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11547304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com