Доступ к «глобальным» переменным в задаче ExecuteSQL - PullRequest
1 голос
/ 15 декабря 2008

У меня есть пакет служб SSIS, который выполняет следующие действия: Выбирает строки подключения из таблицы серверов. Строка подключения - это либо имя сервера вместе с доменом (то есть Dalin.myhouse.com), либо прямой IP-адрес сервера.

Пакет перебирает каждую строку подключения и заполняет определенную «глобальную» переменную. Эта переменная была создана в конструкторе переменных. Для каждой строки подключения пакет будет извлекать информацию о сервере.

Проблема, с которой я сталкиваюсь, заключается в том, что когда вы добавляете IP-адрес сервера в список, «Дружественное имя» может быть неизвестно в то время, поэтому я бы просто указал IP-адрес сервера в столбце строки подключения и понятном имени. столбец таблицы. Я хочу после окончания итерации обновить столбец Friendly Name записи сервера в этой таблице, чтобы имя сервера извлекалось с сервера с помощью SERVERPROPERTY ('Servername')

Для этого я хотел бы использовать задачу ExecuteSQL со следующим кодом:

UPDATE [myDB].[mySchema].[myServers]
SET [ServerName] = VarA
WHERE ConnectionString = VarB

Предыдущий код использует статическое соединение с сервером, на котором находится таблица myServers.

VarA представляет глобальное значение, которое я хочу установить для ServerName, которое будет установлено в отдельной SQLTask с использованием SERVERPROPERTY ('Servername'). Он должен быть в отдельной задаче, потому что он должен был бы соединиться с сервером, используя тот же сервер, который использует текущая итерация.

VarB устанавливается в начале каждой итерации для следующей строки подключения в списке.

Я видел примеры того, как использовать это для Задачи сценария и Компонентов сценария, но я хотел бы просто использовать задачу ExecuteSQL для достижения этой цели.

Резюме:
Подключитесь к ServerA и заполните две глобальные переменные.
Подключитесь к ServerB и используйте две глобальные переменные для обновления определенной строки в таблице.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 декабря 2008

Я не вижу, как это можно сделать без установки переменных в Задаче сценария, поскольку задачи ExecuteSQL должны быть настроены на подключение к базе данных. Задачи сценариев работают для этого, потому что их соединение находится в контексте сервера, который их выполняет. При этом вы можете использовать задачу «Сценарий» до выполнения этой задачи ExecuteSQL, которая устанавливает переменные для экземпляра локального сервера.

0 голосов
/ 17 декабря 2008

Итак, вам нужна задача «Выполнить SQL» для получения параметров?

http://msdn.microsoft.com/en-us/library/ms187685.aspx

Может быть, я неправильно понял ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...