SSIS: Как вытащить оператор SQL из файла в строковую переменную? - PullRequest
3 голосов
/ 26 октября 2009

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


Ответ на вопрос:

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

Ответы [ 3 ]

7 голосов
/ 24 ноября 2009

Вот как я поступил именно так (после поиска повсюду ответа и не поиска ни одного).

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

  1. Добавьте строковую переменную с именем SQLFileName в пакет.
  2. Добавить строковую переменную с именем SQLCommand в пакет.
  3. Добавить задачу сценария в начале потока управления.
  4. Отредактируйте задачу «Сценарий» и перейдите в раздел «Сценарий».
  5. Добавьте SQLFileName в раздел ReadOnlyVariables. Установите это путь к вашему файлу .sql.
  6. Добавьте SQLCommand в раздел ReadWriteVariables.
  7. Нажмите Сценарий проектирования.
  8. Вставьте в скрипт ниже. Он просто читает в содержании файл, указанный SqlFileName в SQLCommand.
  9. OK, выход и подключите задачу сценария к остальной части вашего потока управления.
  10. Перейдите в свой поток данных и выберите запрос источника. Вам нужно будет редактировать свойства с помощью окно свойств. Если вы используете модное окно редактирования, вы получите ошибка в тексте команды отсутствует быть установленным Это потому что SQLCommand пуст во время разработки.
  11. Измените AccessMode на команду SQL из переменной.
  12. В SQLVariableName выберите SQLCommand.
  13. Вы увидите, что красный X добавлен к исходному запросу. Это потому что SQLCommand является пустым. к предотвратить красный X, изменить ValidateExternalMetaData в False.

Вот и все. Я надеюсь, что я запомнил все биты. Сценарий является ключевой частью, так что вы можете получить SQL в переменную и затем использовать переменную в потоке данных.


   Imports System
    Imports System.IO
    Imports Microsoft.SqlServer.Dts.Runtime

    Public Class ScriptMain

        Public Sub Main()

            Try

                Dts.Variables("SQLCommand").Value = System.IO.File.ReadAllText(Dts.Variables("SQLFileName").Value.ToString)

                Dts.TaskResult = Dts.Results.Success

            Catch oException As System.Exception

                Dts.TaskResult = Dts.Results.Failure

            End Try

        End Sub

    End Class
4 голосов
/ 26 октября 2009

Я бы не рекомендовал это делать. Мое предложение является хранимой процедурой.

Вот как, хотя, Создайте файловое соединение в диспетчере соединений. Откройте свойства для подключения файла и отредактируйте выражения. Создайте выражение для свойства строки подключения, содержащего путь к файлу SQL (что-то вроде @[User::SQLFileName], где SQLFileName - ваша переменная).

Настройте задачу «Выполнить SQL» и укажите на соединение с файлом, содержащее только что созданное выражение. Если вы измените путь в переменной, это изменит то, что выполняется SQL (поскольку выражение вычисляется во время выполнения). Вы даже можете загрузить эти пути из БД и выполнить для каждого из них, содержащего задачу «Выполнить SQL». Если вы загружаете / выводите данные с помощью этих файлов, а не только задач SQL, вам нужно следить за столбцами и метаданными.

Kris

0 голосов
/ 26 октября 2009

В качестве альтернативы (и это может не относиться к вам), вы можете создать представление фактической базы данных, которое может быть изменено без доступа к пакету служб SSIS. Затем другие пользователи могут редактировать SQL, как вы упомянули, и вы даже можете получить некоторую поддержку intellisense в сделке.

Я тоже не фанат написания SQL в текстовых полях служб SSIS.

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