SQL Server 2000 DTS. Часть 5. Задачи DTS Designer и Global Variables

ПУБЛИКАЦИИ  

По материалам статьи Marcin Policht: SQL Server 2000 DTS Part 5 - DTS Designer Tasks and Global Variables

В предыдущей статье мы познакомились с простыми типами задач DTS Designer. Мы продолжим здесь их обсуждение, сосредоточившись на более сложных моментах. Однако, прежде чем мы продолжим, давайте более детально изучим понятие DTS Global Variables, которое поможет нам понимать некоторые нюансы настройки задач.
Глобальная переменная - это компонент пакета, состоящий из имени и значения заданного типа (строка, целое число и т.д.) которое ассоциируется с именем. Глобальные переменные обеспечивают временное хранение значений, используемых в рамках DTS пакетов. Если Вы знакомы с написанием скриптов или с программированием, Вы легко поймёте их назначение, так как эти переменные имеют ту же самую цель, которую они имеют в исполняемом коде. Стоит отметить, что имена глобальных переменных зависимы от регистра, так что это может породить проблемы при указании ссылок на одну переменную из двух пакетов (мы рассмотрим такие примеры при обсуждении задачи Execute Package). Глобальные переменные доступны через графический интерфейс на закладке Global Variables свойств пакета. Там Вы можете создавать, изменять и удалять переменные (к этому интерфейсу Вы также можете обратиться из диалогового окна Parameter Mapping в Execute SQL Task или из диалогового окна Add/Edit Assignment в Dynamic Properties Task). То же самое можно сделать при создании ActiveX скрипта, которые мы рассмотрим в следующих статьях (и объясним значение переключателя Explicit Global Variables в свойствах пакета). Главное различие между переменными, созданными графическим интерфейсом, и объявленным в скрипте - продолжительность их жизни. В первом случае, глобальные переменные могут быть сохранены как часть пакета, к ним можно обратиться из любого компонента пакета в течение его исполнения, и они могут считываться после того, как работа пакета будет закончена, если пакет был сохранен. Во втором случае, их жизнь ограничена временем исполнения скрипта (они ни видимы на закладке Global Variables и не доступны после того, как работа пакета завершится).
Давайте рассмотрим пример, демонстрирующий использование глобальных переменных в комбинации с Execute SQL Task (который мы кратко изучили в предыдущей статье). Представим, что мы должны определить самый последний заказ клиента в заданный интервал времени, который хранится в таблице Orders базы данных Northwind. Несмотря на простоту этой задачи (в сущности, это - простой T-SQL запрос), её нам будет вполне достаточно для освоения глобальных переменных (более сложные примеры появятся в следующих статьях). Например, можно реализовать аналогичный подход, если необходимо передавать (и преобразовать) извлеченную информацию о заказе в базу данных Oracle (хотя, это может потребовать некоторых изменений нашего примера):

Создадим в Enterprise Manager средствами Data Transformation Services новый пакет (выбрав New Package в контекстном меню Local Packages). Настроим новое подключение к базе Northwind, используя Microsoft OLE DB provider for SQL Server (указав параметры аутентификации, выбрав Northwind в списке баз данных и назвав подключение Northwind DB). Далее, в меню Task выберите Execute SQL Task (или перетащите его из раздела Task на инструментальной панели с левой стороны окна). Вы увидите диалоговое окно Execute SQL Task Properties. В поле Description напечатайте Select MAX OrderID (или другое описание, расшифровывающее цель этой задачи). Убедитесь, что база Northwind выбрана в списке Existing connection, значение Command time-out = 0 (этим снимается ограничение времени исполнения задачи) а в текстовом боксе SQL Statement введите следующее:


SELECT MAX(OrderID)
FROM Orders
WHERE RequiredDate BETWEEN ? AND ?
AND CustomerID = ?

Как Вы помните из предыдущей статьи, вопросительные знаки в контексте Execute SQL Task определяют входные параметры. В нашем простом запросе мы имеем три параметра (Parameter 1, Parameter 2 и Parameter 3, которые соответствуют первому, второму и третьему вопросительному знаку). Теперь, мы должны связать эти параметры с глобальными переменными, для которых мы должны будем указать какие-нибудь значения. Это можно сделать, нажав на кнопку Parameter, расположенную на закладке General диалогового окна Execute SQL Task Properties. Вы попадёте в диалоговое окно Parameter Mapping. После щелчка по кнопке Create Global Variables, нужно ввести четыре переменные (три для входных параметров и одну для выходного параметра) и определить типы и значения для каждого из них. Обратите внимание, что если Вы создадите не строковую переменную, требуется обязательно ввести её значение, иначе, Вы получите сообщение об ошибке: "could not convert variable XXXX from type BSTR to type YYYY", где XXXX и YYYY - имена созданных Вами переменных. Введите следующие данные:


gVarDateFrom   String  1998-06-02
gVarDateTo     String  1998-06-03
gVarCustomerID String  BONAP
gVarMaxOrderID Integer 0

Как только Вы нажмёте OK, Вы снова вернётесь в окно Parameter Mapping. Здесь нужно мапировать Input Global Variables на параметры, как это показано ниже, используя выпадающий список для каждого из них:


gVarDateFrom   Parameter 1
gVarDateTo     Parameter 2
gVarCustomerID Parameter 3

Далее, на закладке Output Parameters, устанавливаем переключатель Output Parameter Type на Row Value и устанавливаем значение поля Output Global Variables равным gVarMaxOrderID. После этого, закройте активные окна, сохраните и выполните пакет. Откройте свойства DTS Package и перейдите на закладку Global Variables. Вы должны видеть все переменные, которые мы определили, и их значения. Если все действия были сделаны правильно, gVarMaxOrderID должно равняться 11076, а все другие значения должны быть такими, как мы их задали. Как Вы можете видеть, глобальные переменные сохраняют свои значения и после исполнения пакета. Также, очень удобно изменить их в одном месте, если нужно повторно запускать этот пакет для разных gVarCustomerID или для других диапазонов дат. Очевидно, что Вы можете изменять значения глобальных переменных вручную; однако, Вы можете получить то же самое посредством создания соответствующего скрипта. Это позволит Вам упростить или даже полностью автоматизировать модификацию пакета.
Альтернативным подходом к скриптованию, когда мы имеем дело с автоматизированными изменениями параметров пакета, является использование задачи Dynamic Properties Task. Эта задача позволяет выполнять такие модификации во время исполнения, но возможность перестраивать конфигурацию доступна только через графический интерфейс. Вы можете управлять фактически любым компонентом DTS, например, подключения, задачи, шаги (шаги мы подробно рассмотрим, когда начнём изучать компоненты технологического процесса DTS пакетов) и глобальные переменные. Значения свойств каждого из этих компонент могут быть получены из следующих источников:

  • INI File - текстовый файл стандартного формата, разбитый на разделы (с заголовками, включенными в квадратные скобки) и имеющий ключи для каждого из разделов, состоящие из пар ключ/значение, размещённых на отдельных строках. При использовании этой опции, Вы должны указать полный путь к файлу, раздел и ключ, значение которого будет использоваться в задаче.
  • SQL Query - синтаксически правильная инструкция SQL SELECT, использующая существующее подключение. Должны возвращаться скалярные значения, иначе можно будет использовать только первое поле первой записи возвращаемого рекордсета.
  • Global Variable - позволяет изменять любой из параметров, просто указывая название глобальной переменной. Например, для обеспечения мобильности пакета, Вы можете создать глобальную переменную (задав соответствующее значение этой переменной) для свойства DataSource (определяющего имя SQL сервера - источника данных). Когда пакет будет перемещён на другой сервер, Вы можете просто изменить эту глобальную переменную на вкладке Global Variables в свойствах пакета, не прибегая к изменению свойств подключения.
  • Environment Variable - системные и пользовательские переменные Windows (то же самые, что Вы увидите, нажав в диалоговом окне System Properties кнопку Environment Variables).
  • Constant - отдельное значение, полученное и сохраненное в рамках задачи.
  • Data file - файл контента (в отличие от INI File, в него включается всё).

С помощью внешних файлов или переменных среды, Вы можете изменять параметры пакета без его редактирования, что повышает и упрощает его мобильность. Обратите внимание, что задача Dynamic Properties должна исполняться среди первых в пакете (это мы обсудим в следующих статьях, и как этим можно управлять, используя компоненты технологического процесса пакета). Используя такой подход, Вы можете гарантировать, что любое из свойств, которое используется в пакете, будет иметь перед использованием правильное значение.
Глобальные переменные могут предавать данные не только между элементами одного пакета, но и между разными пакетами. Эти функциональные возможности используются в Execute Package Task, где один пакет вызывается из другого. В следующей статье мы обсудим её свойства и рассмотрим примеры её использования.

[В начало]    [К следующей статье цикла]


Перевод: Александра Гладченко  2004г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz