2012-07-20 2 views
1

Я пытаюсь создать поток данных в SSIS, чтобы помочь мне загрузить файл по FTP, и у меня возникли проблемы. Имя файла должно быть динамическим, в формате filename_mmddyy.xls. Поэтому каждый день он применяет дату и загружает новый файл.SSIS - Динамическое имя файла для FTP-компонента

я был в состоянии сделать так, чтобы файл сохранить правильно в потоке данных со следующим выражением:

@[User::path]+ 
Right("0"+(DT_STR,4,1252)DatePart("m",getdate()),2)+ 
Right("0"+(DT_STR,4,1252)DatePart("d",getdate()),2)+ 
Right("0"+(DT_STR,4,1252)DatePart("yyyy",getdate()),2)+ 
".xls" 

FTP-компонент, однако, не будет принимать это как выражение для LocalPath , Я попытался перезаписать мою переменную User :: path внутри компонента Script в моем исходном потоке данных, но это тоже не сработало.

Я знаю, что я пропустил что-то все просто, но я долго смотрел на него, и это просто не пришло ко мне.

Спасибо!

EDIT

Итак, после того, как дурачиться на другой день, вот что я придумал:

Я сделал свою первоначальную задачу создать свой плоский файл. Боковое замечание, мой поставщик действительно нуждался в истинном excel xls, а не в csv, поэтому мне пришлось назначить пункт подключения к файлу, который затем потребовал от меня сделать статический файл на моем сервере.

Затем я использовал задачу сценария (C#), чтобы скопировать статический файл в файл с динамическим именем. Конечно, я должен оставить исходный файл, потому что место назначения excel должно быть там.

Наконец, я сделал другое подключение к файлу и использовал вышеуказанное выражение в качестве строки подключения. Затем у меня задача FTP использовать подключение к файлу в качестве файла для загрузки.

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

Подводя итог, я узнал следующее: В SSIS, когда он говорит «PathIsVariable», то, что вы помещаете в это текстовое поле, принимается как переменная. Поэтому, если я помещаю @ [User :: path], он разрешает «C: \ pathonmydrive». Затем SSIS ищет переменную с именем THAT, то есть C: \ pathonmydrive, чтобы найти файл. Это немного контр-интуитив, но теперь, когда я знаю, я могу избежать этой ловушки.

+0

Просто сделал ответ, объясняющий, как правильно установить переменную с помощью компонента сценария. Возможно, это не так, где ваша проблема. Я передавал файлы с помощью FTP-компонентов и динамических соединителей файлов и видел некоторые ... «причуды» с SSIS. Просто дайте мне знать, если он не работает, и я буду рад помочь диагностировать проблему. – cfrag

ответ

3
  1. Создайте новую переменную, например FilePath. Используйте строку как тип данных и свойства переменной, установите для параметра EvaluateAsExpression значение true.
  2. Настройка выражение переменной: @[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls"
  3. Используйте кнопку Evaluate Expression в редакторе выражений, чтобы увидеть, если выражение решает правильный путь к файлу.
  4. Изменить Expressions имущество вашего FTP task и установить переменную, которую вы создали под LocalPath.
+0

Спасибо, кучка. Я вчера что-то выяснил, чтобы заставить его работать, но я все же хочу попробовать и улучшить его, чтобы работа была как можно меньше ... слишком много рабочих деталей прямо сейчас. –

1

Для того, чтобы изменить значение переменной внутри компонента сценария, необходимо сначала передать переменную READWRITE:

enter image description here

Затем, чтобы установить новое значение переменной:

Dts.Variables["folders"].Value = "value you want to assign"; 
1

Создайте новую переменную, например, FilePath. Используйте строку как тип данных и свойства переменной, установите для параметра EvaluateAsExpression значение true. Настройка выражение переменной:

@[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls" 

Используйте кнопку Вычислить выражение в редакторе выражений, чтобы увидеть, если выражение решает правильный путь к файлу.

Измените свойство выражений задачи FTP и установите переменную, созданную в LocalPath.


Я Выполненный выше способом, но все-таки у меня есть вопрос The variable cannot be found ... Любые мысли

Смежные вопросы