Нужна более разумная конфигурация экологического пакета - PullRequest
2 голосов
/ 09 июня 2010

Я пытаюсь настроить шаблон пакета в SSIS, следуя книге Wrox Programmer to Programmer, Службы интеграции SQL Server 2008: проблема - разработка - решение .Мне действительно нравится эта книга, хотя сейчас 2008 год, и мы используем SQL Server 2005. У меня есть рабочий шаблон пакета, в котором используется Косвенная конфигурация пакета XML для определения среды (локальный разработчик,dev, QA, production и т. д.), в котором запускается пакет. Он находит конфигурацию пакета SQL Server для среды.

Эта установка великолепна, и все, за исключением переменной среды в самом начале.Моя команда предпочла бы, чтобы пакет мог использовать тот же локатор ресурсов среды, что и все наши другие приложения и инструменты, использующие , поэтому у нас нет двух маркеров среды с практически одинаковой информацией в них.Обычно мы ищем раздел реестра в HKey_Local_Machine , но тип конфигурации пакета реестра позволяет только искать регистры HKey_Current_User .

Моей первой мыслью было написать новыйКласс типа конфигурации пакета, который расширяет тип реестра;В конце концов, нам повезло, что мы написали нашего собственного провайдера журналов.SSIS super расширяемый, верно?Так что, похоже, нет способа написать свои собственные типы конфигурации пакетов.

Есть ли еще какой-то способ, которым я могу настроить конфигурацию пакета SSIS SQL Server из строки подключения ключа реестра HKLM ?

Если это невозможно, какие другие обходные пути доступны?Моя идея состоит в том, чтобы написать сценарий PowerShell , который будет создавать / изменять переменную среды, которую будет использовать пакет, извлекая строку подключения из реестра.Таким образом, есть еще два маркера, но, по крайней мере, он автоматически поддерживается и автоматизируется.Нужен ли этот способ обхода?

Спасибо за ваше время.

1 Ответ

0 голосов
/ 14 июня 2010

Итак, я пошел дальше и пошел по пути 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");
...