Цикл Forech служб SSIS - Excel Sheets - 'xlnm # _FilterDatabase' (фантом / призрачный лист) - PullRequest
0 голосов
/ 10 октября 2018

Следуя инструкциям в блоге MSSQLTips, у меня есть установочный пакет с циклом Foreach для циклического прохождения всех листов в рабочей книге и импорта данных в таблицу.

Цикл находит правильный лист ('11-18$'), а затем тот же лист с более длинным именем ('11-18$'_xlnm#_FilterDatabase).Дополнительный лист вызывает data duplication и сообщения об ошибках, такие как "Derived Column.Outputs[Derived Column Output].Columns[SourceSheet]" specifies failure on truncation.

  • Как сделать из цикла исключение объекта 'xlnm # _FilterDatabase'?

  • Почему цикл дублирует данные листа?

Сообщение в блоге MSSQLTips-- Чтение данных из нескольких рабочих таблиц Excel SSIS

Настройка цикла по каждому элементу:

Переменная

  • Переменная isName:'Sheet Name', Scope:'Import_AXExtractAgristatsInventory' (название пакета), Date type:'String', Value:'11-18$'

Редактор цикла по каждому элементу

  • Перечислитель коллекции is Foreach ADO.NET Schema Rowset Enumerator

  • Поставщик подключений is .Net Providers for OleDb\Microsoft Office 12.0 Access Database Engine OLE DB Provider

  • Файл подключения - это путь к \\filepath\file.XLSX

  • Расширенное свойство подключения Connection равно Excel 12.0

  • Отображение переменной соединения равно Variable:='User:SheetName', Index:='2'

  • Строка подключения равно Data Source=C:\filepath\file.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;


Обновление: Foreach ADO.NET Schema Rowset Enumerator и Set Restrictions ограничение

Я думал, что вариант Set Restrictions поможет (исключаялисты фантома) с таким выражением, как !=*_FilterDatabase*, но в соответствии с выдержкой из электронной книги на сайте flylib подстановочные знаки не подходят ...

Перечислитель наборов схем ADO.NET предоставляет способперечислите схему для источника данных.Например, вы можете перечислить таблицы в базе данных, каталоги на сервере или столбцы для таблицы.Для каждой схемы вы можете отфильтровать результаты несколькими способами.На рисунке 13.13 показан редактор перечислителя строк схемы Foreach ADO.NET с выбранной схемой каталогов.

Нет способа указать подстановочный знак для ограничений.

Ссылка: MicrosoftСлужбы интеграции SQL Server 2005: счетчики Foreach

  • Рисунок 13.13.Перечислитель набора строк Foreach ADO.NET предоставляет способ перечисления схемы базы данных.
  • На рисунке 13.14 показано диалоговое окно "Ограничения схемы таблиц" для схемы таблиц.

Обновление: отладка значений в цикле

В попытке отладить объекты листа в цикле я наконец нашел способ остановить цикл иотобразить имя листа.Я нашел статью о публикации в блоге Pragmatic Works, в которой показано, как использовать Script Task, Break Point и Watch Window для отображения значения активного цикла - Цикл по наборам результатов с циклом foreach .

enter image description here


Это рекомендуемые вопросы SO ...

1 Ответ

0 голосов
/ 11 октября 2018

Я выполнил требование, и я шокирован, что оно оказалось довольно простым.Я рад поделиться с вами здесь.

Все конфигурации по-прежнему используются в блоге MSSQLTips , на который я ссылаюсь в своем первоначальном вопросе с использованием конфигураций Foreach ADO.NET Schema Rowset Enumerator.Я добавил один маленький кусочек логики ...

ШАГИ: логика для пропуска имен листов

  1. Переменная (булево) - FINDSTRING
  2. Задача потока данных (Свойства> Выражение> Отключить)
    • Мы хотим остановить Задачу потока данных, если это недопустимый лист.Для этого ...
    • Щелкните левой кнопкой мыши задачу «Поток данных», перейдите на панель «Свойства», в разделе «Выражения» выберите значок elipse («...») и выберите свойство «Disable», а дляВ выражении просто добавьте переменную, созданную на предыдущем шаге '@[User::varIsInvalidSheet_DisableTask]'
  3. Запустите отладчик, чтобы убедиться, что настройки вступили в силу
    • Все листынайдено, но фантомные листы имеют свойство Disable TRUE, и задача игнорируется.

Вот некоторые снимки экрана этих шагов

ssis_task-expression-disable

ssis_debug-loop-sheet-objects

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