Компонент скрипта служб SSIS DT_TEXT newline неправильно хранится в таблице - PullRequest
2 голосов
/ 08 июня 2019

Мне нужно сохранить большой текст, созданный в пакете компонентов потока сценариев служб SSIS, в столбец назначения с типом данных varchar (max).Поэтому я использую в качестве текстового потока выходного столбца [DT_TEXT].Внутри скрипта C # я вызываю метод

AddBlobData(Encoding.Default.GetBytes(LARGE STRING WITH LINE BREAKES)) 

Вся информация хранится в таблице, однако разрывы строк не соблюдаются.

Я пробовал разные кодировки, такие как ASCII, UTF8.Также я попытался добавить в конце каждой строки \r\n, без изменений в результате.

StringBuilder sb = new StringBuilder();

sb.AppendLine("This is the first line.");
sb.AppendLine("This is the second line.");
sb.AppendLine("This is the third line.");

DataBuffer.AddRow();
DataBuffer.VarcharMaxColumn.AddBlobData(Encoding.Default.GetBytes(sb.ToString()));

Результат:

Это первая строка.Это вторая строка.Это третья строка.

Между строками огромное пространство, но не разрыв строки, который я ожидаю увидеть.

Кто-нибудь знает, как это исправить?

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Я нашел ответ на свой вопрос.Кажется, что невозможно перенести перевод строки из компонента сценария потока данных в таблицу.Не с DT_STR и не с DT_TEXT.Я нашел это трудным путем, потратив много времени на изучение этого вопроса.Хотя я надеюсь, что ошибаюсь.

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

    SELECT T2.[KeyColumn]
          ,(SELECT [VarcharMaxColumn] + CHAR(13) AS [text()]
              FROM [dbo].[TemporaryTable] AS T1
             WHERE T1.[KeyColumn] = T2.[KeyColumn]
          ORDER BY [SortOrder]
               FOR XML PATH(''), TYPE)
          ,T2.[AdditionalColumn]
      FROM [dbo].[TemporaryTable] AS T2
  GROUP BY T2.[KeyColumn], T2.[AdditionalColumn]
0 голосов
/ 09 июня 2019

Попробуйте не использовать построитель строк:

string str;
str ="This is the first line." + Environment.NewLine + "This is the second line." + Environment.NewLine + "This is the third line."

DataBuffer.AddRow();
DataBuffer.VarcharMaxColumn.AddBlobData(Encoding.Default.GetBytes(str));
...