Компонент служб SSIS для удаления перевода строки из всех (n) полей varchar в потоке данных - PullRequest
1 голос
/ 24 апреля 2020

Я использую компонент служб SSIS для извлечения данных из API. API доставляет XML, XML содержит такие данные:

<tag>
code
</tag>

Перевод строки до и после 'code'

Это означает, что то, что введено в мой (n) varchar столбцы в SQL выглядят так: CHAR(10)codeCHAR(10)

Это сильно портит, помимо прочего, то, как все выглядит в отчетах. Таким образом, CHAR (10) должен исчезнуть. Это должно быть отфильтровано между исходным компонентом и компонентом назначения в моем потоке данных. Я мог бы использовать производные столбцы для этого, но это касается 9 потоков данных с (всего) 385 (n) полями varchar. Много работы! Можно ли использовать компонент сценария, который просто делает replace(field,linefeed,'') на каждом (n) varchar? Чтобы все данные проходили через этот компонент и выходили без перевода строки?

Если это так, как мне это сделать? Я вполне в порядке с SQL, могу читать на большинстве языков, но мне нужна помощь в написании этого на C# из VB. NET. Я проектирую это в VS2019 и внедряю в ADFv2 IS. Целевыми объектами являются базы данных SQL Azure.

Я не могу просто запустить некоторые SQL после запуска задания SSIS, поскольку следующий запуск приведет к восстановлению данных. Затем он заключит, что CHAR(10)codeCHAR(10) отличается от code и вставит новую строку, нарушая ограничение уникальности для code. Вот почему я должен сделать это после получения данных и перед записью данных.

Ответы [ 2 ]

1 голос
/ 27 апреля 2020

Вам не обязательно нужен SSIS для этого. Вы можете использовать функцию TRIM в SQL Server 2017 и более поздних версиях и Azure SQL DB. Вставьте XML в промежуточный стол без изменений от оригинала. Затем вызовите хранимую процедуру, которая очищает XML и при необходимости вставляет ее в другую таблицу. Пример:

--INSERT INTO ...
SELECT 
    TRIM( CHAR(10) + CHAR(13) FROM someXML.value( '(tag/text())[1]', 'VARCHAR(20)' ) ) trimmedTag
FROM xmlTest

TRIM дает вам возможность добавлять символы, которые вы хотите удалить. В приведенном выше примере я использовал функцию CHAR для удаления перевода строки (10) и возврата каретки (13) соответственно.

В SSIS вы можете использовать задачу Execute SQL, чтобы вызвать профессионала. c.

0 голосов
/ 30 апреля 2020

Я не смог найти решение, которое бы не требовало обширного кодирования за счет производительности. Одним из решений, которое я попробовал, было написание XML в виде CSV, поиск и замена в CSV en, а затем импортирование его в таблицу. Хотя это сработало, оно сделало решение несостоятельным сложным и нанесло ущерб с точки зрения производительности. Это была борьба с симптомами, а не лечение проблемы. Поэтому я пошел и поговорил с парнями, поставляющими API, и они удалили эти переводы строк. Это оказалось единственным хорошим решением.

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