2016-12-07 6 views
1

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

Поэтому я хочу игнорировать символы, прошедшие дату. Variable я до сих пор является

"\\\\192.168.100.201\\f\\Backups\\582499_backup_" 
+ (DT_STR,4,1252)DATEPART("yyyy" , getdate()) + "_" 
+ RIGHT("0" + (DT_STR,4,1252)DATEPART("mm" , getdate()), 2) 
+ "_" 
+ RIGHT("0" + (DT_STR,4,1252)DATEPART("dd" , getdate()), 2) 
+".bak" 

Это возвращает

\192.168.100.201\f\Backups\582499_backup_2016_12_07.bak

фактический файл имена 582499_backup_2016_12_07_030001_7282785.bak

Так что нужно игнорировать все прошло 07. Однако я не могу показаться, чтобы заставить его работать. Я попытался следующие

SQL Central

It ошибок, дающих ошибку

[File System Task] Error: An error occurred with the following error message: "Could not find file '\192.168.100.201\f\Backups\582499_backup_2016_12_07.bak'.".

+0

Я часто нахожу задачу выполнения выполнения более полезной. Ниже приведен пример использования процесса execute для перемещения кучи файлов с помощью widlcards: https://mitchellpearson.com/2015/06/05/move-files-in-ssis-using-execute-process-task/ Вместо этого вы можете копировать используя COPY вместо перемещения. Вот еще один пример: http://stackoverflow.com/questions/23158909/copying-all-files-in-ssis-without-foreach –

ответ

0

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

  1. Объявление переменной, называемой "filename" строки типа, присваивает любое значение, поскольку оно будет динамически изменяться во время выполнения. Если вы оставите его пустым, ваша задача файловой системы будет жаловаться, что он используется как источник/назначение и пуст (он не знает, что он будет назначен динамически).
  2. Объявите переменную «SourceDir» и назначить «\\ 192.168.100.201 \ е \ Подпорки \» (переменные ручки обратной косой черты ускользающей для вас)
  3. Объявите переменную «DestDir» и назначить свой путь назначения заканчивающаяся обратной косой черты, как "\\ 192.168.100.201 \ е \ Destination \"
  4. ForEach Loop Контейнер, перейдите к коллекции> выражения
  5. Добавить в выражение "Справочник" переменная @ [User :: SourceDir ]
  6. Добавьте к выражению «FileSpec» свой пользовательский exp ression но заканчивая «* .bak» (это позволит специф_файлам выбрать файлы, игнорируя ничего прошлый день в подписи файла)

    "582499_backup_" + (DT_STR,4,1252)DATEPART("yyyy", getdate()) + "_" + RIGHT("0 (DT_STR,4,1252)DATEPART("mm" , getdate()), 2) + "_" + RIGHT("0 (DT_STR,4,1252)DATEPART("dd" , getdate()), 2) +".bak" 
    
  7. В переменном Отображении, добавьте переменную «User: : имя файла» с индексом 0

  8. Добавить вы File System Task в цикл просмотра Контейнер
  9. файловой системы Задача: обеспечить вашу переменную "User :: DestDir" в «DestinationVariable», установка IsDestinationVariable в true.
  10. Задача файловой системы: укажите свою переменную «Пользователь :: имя файла» как «SourceVariable», установив IsSourcePathVariable в true.
  11. Поместите тестовые файлы в исходный каталог и запустите его в режиме отладки.
  12. Вы также можете щелкнуть правой кнопкой мыши по контейнеру ForEachLoop и установить некоторые точки останова, чтобы увидеть переменную User :: filename, изменяющую значение для разных имен файлов в коллекции перечислителей ForEachLoop.
  13. Теперь вы можете развернуть свой пакет и создать задание агента SQL Server, чтобы назначить расписание для вашего пакета для запуска и бум. У вас есть полностью автоматическое резервное копирование. Если контейнер ForEachLoop не находит файл для перемещения без проблем, он будет изящно выйти.