Подтвердить что ты не робот

Как передать параметр в 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. Надеюсь, кто-то может мне помочь.

4b9b3361

Ответ 1

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

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

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

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

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

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

  • в вашем пакете, введите задачу потока данных с компонентами источника/назначения
  • щелкните в любом месте фона, чтобы свойства задачи отображались на панели свойств
  • В панели свойств найдите свойство 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]) + "'"

НТН

Ответ 2

[ADO.NET КАК РЕШЕНИЕ ИСТОЧНИКА ТИПА]

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

enter image description here

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

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

enter image description here

Шаг 4 Выберите свойство команды и нажмите кнопку "..." enter image description here

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

Ответ 3

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

В потоке управления создайте задачу 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 ?

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

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...

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

Ответ 4

Здесь OLE DB Apporach:

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

enter image description here

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

enter image description here

enter image description here

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

Также обязательно добавьте пробелы в строку между переменными. Сложно это увидеть, но И имеет пространство с обеих сторон:

"И"

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

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

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

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

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

enter image description here