Как перезаписать назначение Excel в SSIS?

#ssis

#ssis

Вопрос:

Я создал пакет для извлечения данных из двух таблиц SQL Server и с помощью объединения слиянием объединил эти данные, а затем сохранил результат в пункте назначения Excel.

В первый раз все работает нормально. Во второй раз он сохраняет повторяющиеся данные в файле Excel.

Как мне перезаписать строки файла Excel?

Комментарии:

1. Вы хотите всегда создавать новый файл или: вставлять новые строки, удалять несуществующие строки и обновлять существующие строки в пункте назначения Excel?

Ответ №1:

Да, возможно!

Вот решение:

Сначала перейдите к месту назначения Excel, нажмите кнопку «Создать» рядом с названием листа Excel, скопируйте запрос DML внутрь. Затем поместите задачу Execute SQL в свой поток управления и подключите ее к вашему потоку данных, который содержит назначение Excel. Установите тип подключения в Excel, установите соединение с менеджером соединений Excel вашего пункта назначения Excel, перейдите к инструкции SQL и введите :

 Drop TABLE `put the name of the sheet in the excel query you just copied`
Go
  

наконец, вставьте запрос после него.

Это все, что вам нужно сделать, чтобы решить проблему.

Вы можете обратиться к этой ссылке для получения полной информации:http://dwhanalytics.wordpress.com/2011/04/07/ssis-dynamically-generate-excel-tablesheet /

Комментарии:

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

2. @GergoErdosi, ответ изменен соответствующим образом.

3. @GergoErdosi, я ответил на вопрос, и это точно работает. Однако вместо вознаграждения я потерял очки! Это несправедливо, не так ли? 🙂

4. @Sahand, неплохо, хотя мне пришлось использовать синтаксис типа DROP TABLE [mySheet $]. 1

5. Это работает нормально, если файл действительно существует, но что касается первого раза? Я получил исключение «Таблица ‘ИМЯ МОЕЙ ТАБЛИЦЫ’ не существует».

Ответ №2:

Да, возможно!

Используя SSIS, мы можем решить эту проблему:

прежде всего, создайте файл формата Excel (формат структуры с использованием менеджера соединений Excel) в одном месте в качестве файла шаблона. Затем создайте копию этого файла Excel с помощью ЗАДАЧИ ФАЙЛОВОЙ СИСТЕМЫ в другом месте и убедитесь, что установлено OverwriteDestination=True. Наконец, используя задачу потока данных, вставьте данные в новый скопированный файл. всякий раз, когда мы хотим вставить данные, он создаст копию файла шаблона Excel, а затем загрузит данные.

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

Комментарии:

1. Отличное предложение — Нестандартное мышление! Спасибо, манодж.

2. @manoj, я создал подключение к OLE DB и диспетчер подключений Excel для записи данных в файл Excel. Затем я создал задачу файловой системы для создания копии этого файла Excel и установил-Overwrite = True. Теперь, если я запускаю задачу потока данных, она продолжает добавлять данные в исходный файл Excel, а задача файловой системы копирует этот файл в новый файл в отдельном расположении.

Ответ №3:

К сожалению, диспетчер соединений Excel не имеет настройки, позволяющей перезаписывать данные. Вам нужно настроить некоторые операции с файлами, используя задачу файловой системы в потоке управления.

Существует несколько возможностей, вот одна из них. Вы можете создать файл шаблона (который содержит только лист с заголовком), и перед преобразованием потока данных задача файловой системы копирует его поверх ранее экспортированного файла.

Задача файловой системы (MSDN)

Ответ №4:

Для Excel он добавит данные. Для перезаписи данных такой опции не существует.

Вы должны удалить и воссоздать файл с помощью задачи файловой системы.

Ответ №5:

Использование CSV-файла с помощью диспетчера подключений к плоским файлам послужит вашей цели перезаписи.

Ответ №6:

Лучшим решением для меня было использование задач файловой системы для удаления и воссоздания файлов Excel из шаблона.

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

Я сначала:

  1. Создайте шаблон Excel (вручную)
  2. Создайте исходный файл Excel для использования (вручную)

Затем в контейнере foreach:

  1. Удалить исходный файл (задача файловой системы SSIS)
  2. Скопируйте шаблон как исходный файл (задача файловой системы SSIS)
  3. Получить данные с SQL Server и записать их в исходный файл (задача потока данных SSIS)
  4. Отправьте почту (SSIS -> Хранимая процедура SQL)