Как сделать имя сервера динамичным в пакете SSIS

У меня есть много пакетов SSIS что все подключение к той же базе данных. Я не хочу трудно кодировать имя сервера в соединение дб в каждой базе данных, потому что это отличается от dev для проживания сервера. И те имена серверов могли бы изменяться со временем.

Я знаю, что можно поместить его в файл конфигурации, но все эти пакеты SSIS хранятся в SQL Server 2008, и я хочу сохранить все подробности в SQL Server.

У кого-либо есть какие-либо предложения или совет?

Я думал о создании пакета под названием GetServerName, который возвращает имя сервера, которое я мог использовать для изменения соединений в каждом пакете. Но мог бы быть лучший путь.

6
задан Craig HB 21 January 2010 в 17:57
поделиться

5 ответов

Очень приятная особенность в SSIS, чтобы решить только вашу проблему, называется конфигурациями пакета. У многих людей есть разные мнения и / или идеи о том, как пойти в хранение вашего динамического сервера / пакетных свойств / вариабельных значений. Файлы конфигурации, переменные среды, SQL Server или записи реестра. Я лично люблю хранить всю информацию на SQL Server, что вы хотите сделать. Для этого выполните следующие действия в этой статье: Шаги конфигурации пакета

7
ответ дан 8 December 2019 в 18:36
поделиться

Мы используем таблицу конфигурации, а не файла. Вы начинаете с переменной среды, чтобы указать в базу данных с таблицей конфигурации, а затем оттуда потяните все другие конфигурации.

Вот образец скрипта для заполнения таблицы конфигурации (вы создадите отдельный скрипт для 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
3
ответ дан 8 December 2019 в 18:36
поделиться

В дополнение к файлу конфигурации ...

Вы можете определить переменную, которая может быть установлена ​​в командной строке, либо в задании пакетных заданий или сервера SQL Server. Переменная может быть замена в имя сервера (по выражению, IIRC).

Это полезно, если вы хотите развертывание файлов.

Редактировать:

Пример : (Извините, SQL Server Central требует регистрации)

1
ответ дан 8 December 2019 в 18:36
поделиться

Я заполняю переменную с помощью сервера из запроса, который имеет активное имя сервера. Затем в задаче скрипта я просто изменив строку соединения

, этот пример предназначен для экскуцированного, но это было бы очень похоже на подключение 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;"
2
ответ дан 8 December 2019 в 18:36
поделиться

Я обнаружил, что конфигурационный файл является довольно удобным способом.

Если вы запланируете свой пакет, чтобы выполнить из агента SQL Server, вы можете указать файл конфигурации для использования из пути файла, и который обычно заботится обо всех моих требованиях параметра.

Если вы хотите сохранить результаты на SQL Server, вы можете хранить их в таблице и получить их. Но теперь вы должны знать, какой сервер / таблицу, чтобы идти против dev / test / prod, и вы вернетесь к исходной проблеме.

Мой совет: иметь файл конфигурации в том же физическом месте на всех серверах (dev / test / prod) и иметь место задания в соответствующий файл конфигурации для параметров.

0
ответ дан 8 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: