У меня есть много пакетов SSIS что все подключение к той же базе данных. Я не хочу трудно кодировать имя сервера в соединение дб в каждой базе данных, потому что это отличается от dev для проживания сервера. И те имена серверов могли бы изменяться со временем.
Я знаю, что можно поместить его в файл конфигурации, но все эти пакеты SSIS хранятся в SQL Server 2008, и я хочу сохранить все подробности в SQL Server.
У кого-либо есть какие-либо предложения или совет?
Я думал о создании пакета под названием GetServerName, который возвращает имя сервера, которое я мог использовать для изменения соединений в каждом пакете. Но мог бы быть лучший путь.
Очень приятная особенность в SSIS, чтобы решить только вашу проблему, называется конфигурациями пакета. У многих людей есть разные мнения и / или идеи о том, как пойти в хранение вашего динамического сервера / пакетных свойств / вариабельных значений. Файлы конфигурации, переменные среды, SQL Server или записи реестра. Я лично люблю хранить всю информацию на SQL Server, что вы хотите сделать. Для этого выполните следующие действия в этой статье: Шаги конфигурации пакета
Мы используем таблицу конфигурации, а не файла. Вы начинаете с переменной среды, чтобы указать в базу данных с таблицей конфигурации, а затем оттуда потяните все другие конфигурации.
Вот образец скрипта для заполнения таблицы конфигурации (вы создадите отдельный скрипт для 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
В дополнение к файлу конфигурации ...
Вы можете определить переменную, которая может быть установлена в командной строке, либо в задании пакетных заданий или сервера SQL Server. Переменная может быть замена в имя сервера (по выражению, IIRC).
Это полезно, если вы хотите развертывание файлов.
Редактировать:
Пример : (Извините, SQL Server Central требует регистрации)
Я заполняю переменную с помощью сервера из запроса, который имеет активное имя сервера. Затем в задаче скрипта я просто изменив строку соединения
, этот пример предназначен для экскуцированного, но это было бы очень похоже на подключение 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;"
Я обнаружил, что конфигурационный файл является довольно удобным способом.
Если вы запланируете свой пакет, чтобы выполнить из агента SQL Server, вы можете указать файл конфигурации для использования из пути файла, и который обычно заботится обо всех моих требованиях параметра.
Если вы хотите сохранить результаты на SQL Server, вы можете хранить их в таблице и получить их. Но теперь вы должны знать, какой сервер / таблицу, чтобы идти против dev / test / prod, и вы вернетесь к исходной проблеме.
Мой совет: иметь файл конфигурации в том же физическом месте на всех серверах (dev / test / prod) и иметь место задания в соответствующий файл конфигурации для параметров.