Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 需要更智能的环境包配置_Sql Server 2005_Powershell_Ssis_Environment Variables_Registry - Fatal编程技术网

Sql server 2005 需要更智能的环境包配置

Sql server 2005 需要更智能的环境包配置,sql-server-2005,powershell,ssis,environment-variables,registry,Sql Server 2005,Powershell,Ssis,Environment Variables,Registry,我正试图在SSIS中设置一个包模板,遵循Wrox程序员对程序员的书籍《SQL Server 2008集成服务:问题-设计-解决方案》。我真的很喜欢这本书,尽管它是2008年的,我们使用的是SQLServer2005。我有一个工作包模板,它使用一个间接XML包配置来识别包运行在什么环境(本地开发人员、开发人员、QA、生产等)。找到环境的SQL Server包配置 这个设置非常好,除了最前面的环境变量之外。我的团队希望包能够使用与我们所有其他应用程序和工具使用的相同的环境资源定位器,这样我们就不需要

我正试图在SSIS中设置一个包模板,遵循Wrox程序员对程序员的书籍《SQL Server 2008集成服务:问题-设计-解决方案》。我真的很喜欢这本书,尽管它是2008年的,我们使用的是SQLServer2005。我有一个工作包模板,它使用一个间接XML包配置来识别包运行在什么环境(本地开发人员、开发人员、QA、生产等)。找到环境的SQL Server包配置

这个设置非常好,除了最前面的环境变量之外。我的团队希望包能够使用与我们所有其他应用程序和工具使用的相同的环境资源定位器,这样我们就不需要两个环境标记中包含基本相同的信息。通常我们在HKey\U Local\U Machine中查找注册表项,但注册表包配置类型仅允许您查找HKey\U Current\U User注册表

我的第一个想法是编写一个新的包配置类型类来扩展注册表类型;毕竟,我们很幸运地编写了自己的自定义日志提供程序。SSIS是超级可扩展的,对吗?因此,似乎没有办法编写自己的包配置类型

是否仍有某种方法可以从HKLM注册表项连接字符串配置SSIS SQL Server包配置

如果这是不可能的,还有什么其他的解决办法?我的想法是编写一个PowerShell脚本,通过从注册表获取连接字符串来创建/修改包将使用的环境变量。这样,仍然有两个标记,但至少它是自动维护和自动化的。这种变通方法是否必要


谢谢您抽出时间。

所以我继续使用PowerShell路线,因为没有其他选择

这里是脚本的缩写版本,我无法显示查找connectionString变量的代码,因为它有一些私有细节,但是如果您使用它作为引用,这些行对于您的环境来说无论如何都是唯一的

$ErrorActionPreference = "Stop";

# Open a connection to verify that the connection string works.
"Verifying connection string: $connectionString";
$oleDbConnection = New-Object System.Data.OleDb.OleDbConnection $connectionString;
$oleDbConnection.Open();
$oleDbConnection.Dispose();

# Set the environment variable
"Writing to System Environment Variable 'SSIS_CONFIG' replacing old value: $($env:SSIS_CONFIG)";
[Environment]::SetEnvironmentVariable("SSIS_CONFIG", $connectionString, "Machine");

所以我继续走PowerShell路线,因为没有其他选择

这里是脚本的缩写版本,我无法显示查找connectionString变量的代码,因为它有一些私有细节,但是如果您使用它作为引用,这些行对于您的环境来说无论如何都是唯一的

$ErrorActionPreference = "Stop";

# Open a connection to verify that the connection string works.
"Verifying connection string: $connectionString";
$oleDbConnection = New-Object System.Data.OleDb.OleDbConnection $connectionString;
$oleDbConnection.Open();
$oleDbConnection.Dispose();

# Set the environment variable
"Writing to System Environment Variable 'SSIS_CONFIG' replacing old value: $($env:SSIS_CONFIG)";
[Environment]::SetEnvironmentVariable("SSIS_CONFIG", $connectionString, "Machine");

我从未尝试过从注册表读取配置路径,在我们的项目中,我们使用了环境变量,但我相信您在读取hklm时可能会遇到问题。谷歌的快速搜索也证实了这是一个限制。powershell的想法听起来很酷,我不会担心存储两次东西,因为使用这种方法,您实际上不会存储两次,您只需通过一个不寻常的地方传递它,仅此而已。我会选择powershell解决方案。我从未尝试过从注册表读取配置路径,在我们的项目中,我们使用了环境变量,但我相信您在读取hklm时可能会遇到问题。谷歌的快速搜索也证实了这是一个限制。powershell的想法听起来很酷,我不会担心存储两次东西,因为使用这种方法,您实际上不会存储两次,您只需通过一个不寻常的地方传递它,仅此而已。我会选择powershell解决方案。