Как передать параметр в ADO.NET Source SSIS

Привет, мне нужна помощь Это будет мой первый пакет SSIS, и я учусь, когда я иду. Пока это то, что у меня есть.

Я создал поток управления. Затем я создал три соединения ADO.Net, два для источника и один для назначения. Затем я создал задачи потока данных, которые копируют данные из таблицы в одной базе данных в соответствующую таблицу в другой базе данных на том же сервере. задача потока данных имеет 2 источника ADO NET и назначение ADO NET. Назначение просто сопоставляет поля вместе.

Хорошо, пока все хорошо. Это моя проблема. Некоторые исходные запросы имеют критерии даты. Примером может служить:

SELECT --Code Here WHERE CONVERT(varchar, call_date, 112) BETWEEN '6/1/2013' AND '7/1/2013' 

Я хочу заменить эти жестко закодированные даты на переменные. Что-то вроде:

 WHERE CONVERT(varchar, call_date, 112) BETWEEN STARTDATE AND ENDATE 

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

Это единственное решение, которое я знаю, потому что я просто начинающий здесь в пакете SSIS. Надеюсь, кто-то может мне помочь

Поскольку ни один из ответов здесь фактически не отвечает на вопрос (обратите внимание на источник ADO.NET , а не OLE DB!), Вот реальный ответ.

В SSIS вы не можете параметризовать источник ADO.NET. Вы должны использовать обходной путь.

К счастью, есть несколько обходных решений. Один из них будет создавать компонент скрипта, который действует как источник и кодирует его. Однако не всегда можно легко преобразовать существующий ресурс в скрипт, особенно когда ему не хватает знаний программирования ADO.NET.

Существует еще один способ обхода, который будет создавать SQL-запрос до того, как ADO.NET Source предпримет действие. Однако при открытии источника ADO.NET вы заметите, что режим доступа к данным не допускает ввода переменной. Итак, как вы продолжаете?

Вы хотите динамически установить выражение SQL источника ADO.NET, поэтому вы должны сообщить своей задачей потока данных настройку исходного компонента SSIS ADO.NET с помощью Expression.

Чтобы сделать длинный рассказ коротким (или не совсем таким-коротким :), сделайте следующее:

  • в вашем пакете, введите задачу потока данных с компонентами источника / назначения
  • щелкните в любом месте фона, чтобы свойства задачи отображались на панели свойств
  • в панели свойств найдите свойство Expressions, которое может настраивать различные свойства источника данных / назначения и открывать его с помощью кнопки с многоточием (…)
  • в разделе «Свойство» выберите свойство SQL Command вашего источника (например, [источник ADO.NET]. [SqlCommand]), чтобы добавить одну строку
  • нажмите кнопку эллипса для строки, чтобы открыть Expression Builder
  • постройте динамический запрос в построителе выражений

Последний шаг может быть несколько громоздким для параметра date / datetime. Однако, вот пример, для вашего удобства:

 "SELECT * FROM YOUR_SOURCE_TABLE WHERE your_date_column = '" + (DT_WSTR,4)YEAR(@[User::VAR_CONTAINING_DATE]) + "-" + (DT_WSTR,2)MONTH(@[User::VAR_CONTAINING_DATE]) + "-" + (DT_WSTR,2)DAY(@[User::VAR_CONTAINING_DATE]) + "'" 

НТН

Хорошо, вот как я это делаю.

В потоке управления создайте задачу Execute SQL. Настройте соединение с БД. В SQLStatment сделайте что-нибудь вроде.

 select getdate() -1 startDate , getdate() endDate 

Установите ResultSet на вкладке genral в Single Row. Перейдите на вкладку «Набор результатов», нажмите «Добавить». Дайте имя результата «StartDate», а затем добавьте новую переменную.

 Name: startDate (must be the same name as the alius in the select) Namespace: user type: DateTime Value: 02-09-2013 

Теперь, когда он запускается, он должен заполнить пользовательскую переменную текущей датой и датой дня. Сделайте то же самое с EndDate

Создайте вторую задачу Execute SQL. Свяжите ее с первой. Добавьте этот статус SQL. ? будут вашими переменными

 select stuff WHERE CONVERT(varchar, call_date, 112) BETWEEN ? AND ? 

Перейдите к отображению Паратера. Добавить один

 Variable Name should be something like User::StartDate Direction Input Datetype: Nvarchar Parameter name: 0 Parameter size: 0 

добавьте второй

 Variable Name should be something like User::EndDate Direction Input Datetype: Nvarchar Parameter name: 1 Parameter size: 0 

Когда вы добавляете третий, просто добавьте имя параметра 2 …

Запустить его.

Вот OLE DB Apporach:

Создайте некоторые параметры для своего пакета. Если вы сделаете их обязательными, они, ну, требуются, и ваш пакет не будет работать без каких-либо значений. Поле в столбце Значение будет использоваться по умолчанию и используется для отладки.

введите описание изображения здесь

Затем создайте переменную и добавьте выражение:

введите описание изображения здесь

введите описание изображения здесь

Редактор выражений использует размытую версию C # (если вам было любопытно)

Также убедитесь, что в вашей строке добавлены пробелы между переменными. Его трудно увидеть, но у И есть пространство с обеих сторон:

" А ТАКЖЕ "

Я почти забыл. Значения параметров yor должны быть в «singleQuotes». Это можно сделать одним из двух способов: вы можете включить кавычки, когда вы даете значение строке, или можете добавить некоторые кавычки в выражении (что я обычно делаю).

Добавление их в выражение будет выглядеть примерно так:

"some stuff " + "'" + @[variable] + "'"

Нажмите «Оценить выражение», чтобы увидеть, содержит ли ваша переменная правильную строку.

Последний шаг – добавить источник OLE DB, настроить соединение (если у вас его еще нет) и добавить запрос из переменной.

введите описание изображения здесь

ADO.Net Тип источника решения

Шаг 1 Создайте переменные для каждого параметра, который вы хотели бы использовать.

введите описание изображения здесь

Шаг 2 Выберите задачу на вкладке «Поток управления», которая выполняет запрос

Шаг 3 Перейдите в свойства этой задачи, чтобы выбрать выражения, нажав кнопку «…»

введите описание изображения здесь

Шаг 4 Выберите свойство команды и нажмите кнопку «…» введите описание изображения здесь

Шаг 5 Теперь вы можете построить свой запрос здесь, включая переменные, определенные на шаге 1. Сохраните, когда закончите. Наслаждайтесь!