2013-07-02 5 views
3

У меня есть база данных SQL Server 2005 с пакетом обновления 2 (SP2), которая имеет таблицу с атрибутом poc_resp_city, которая равна nvarchar(35).Ошибка обрезки строки SSIS

Было изменено на nvarchar(80) 2 месяца назад, не выравнивая тот же атрибут в хранилище данных. (Который до сих пор nvarchar(35))

Загрузочные данных пакета служб SSIS (после двух месяцев правильной работы) теперь дает обратный сбой пакета каждый раз, когда я запускаю его со следующей ошибкой:

There was an error with output column "poc_resp_city" (2250) on output "OLE DB Source Output" (11). The column status returned was: "Text was truncated or one or more characters had no match in the target code page.". There was an error with output column "poc_resp_city" (2250) on output "OLE DB Source Output" (11). The column status returned was: "Text was truncated or one or more characters had no match in the target code page.".

SSIS Error Code DTS_E_PRIMEOUTPUTFAILED. The PrimeOutput method on component "Source Table" (1) returned error code 0xC020902A. The component returned a failure code when the pipeline engine called PrimeOutput(). The meaning of the failure code is defined by the component, but the error is fatal and the pipeline stopped executing. There may be error messages posted before this with more information about the failure.

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

Важное примечание. У меня нет даже одной записи, которая имеет более 35 символов, поэтому усечение никогда не происходит. (это предупреждение относится к какому-то шагу проверки SSIS)

Теперь я думаю, что, возможно, через некоторое время пакет SSIS перекомпилирует себя, и теперь он видит это несоосность в своих метаданных (35 =/= 80), и потому Атрибут TruncationRowDisposition установлен в RD_FailComponent, он не выполняет компонент.

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

Спасибо!

+0

Вы проверили MAX (LEN()) в исходной таблице? Я бы предположил, что вы как-то выбрали запись более 35 символов, может быть, непечатаемых или конечных пробелов. Это кажется более вероятным, чем объяснение спонтанной перекомпиляции, хотя SSIS 2005 довольно старая и всегда имела более странное поведение, чем 2008 или 2012. – criticalfix

+0

Я проверил ее и проверил LEN (city + 'a) тоже, чтобы игнорировать пробелы. (потому что LEN ('aa') и LEN ('aa') возвращает одно и то же значение. И нет записи, которая выше 35 – dn7123

ответ

0

Вам необходимо обновить размер колонки:

  1. С правой нажатием кнопки на OLE DB Source -> Show Advanced Editor
  2. Выберите Input and Output Properties вкладку ->Ole DB Source Output ->Output Columns
  3. В правой панели Length строки вставить свой новый размер.
  4. Нажмите OK

Show Advanced Editor

Или вы можете скопировать запрос из OLE DB Source, удалить OLE DB Source, вставить новый OLE DB Source и вставки запроса. Это автоматически обновит ваши столбцы.

Просто помните, что там, вероятно, больше элементов в DataFlow, где вам нужно изменить длину вашей колонки, как Data Converion ...

+0

Да, я знаю, что могу сделать эту работу с помощью расширенного редактора и установки длины данных к правильному. Но с точки зрения клиента я должен привести правильную причину, по которой эта ошибка появляется в SSIS через 2 месяца несоосности. – dn7123

+0

Вы можете разделить данные запроса пополам и посмотреть, возникает ли ошибка. Затем снова разделите, где ошибка находится в два раза, пока не найдете одну строку, которая вызывает ошибку :) – Justin

+0

Ошибка SQL Server. Эта ошибка появляется только при выполнении задачи проверки метаданных SSIS. – dn7123