Ошибка усечения SQL Server 2005 Удалить / Вставить - PullRequest
0 голосов
/ 02 апреля 2009

Поэтому я пытаюсь выполнить массовую вставку с помощью SSIS и постоянно получаю:

«Собственный клиент Microsoft SQL» Hresult: 0x80004005 Описание: «Строка или двоичные данные будут обрезаны».

Хотя у меня уже есть преобразование данных для каждого столбца в тот же тип, что и в таблицу, в которую вставляются строки. Я использовал представление, и данные выглядят так, как и предполагалось непосредственно перед этапом вставки БД. Все еще получите ошибку.

Затем я зашел в студию управления сервером sql, настроил запрос вставки в эту проклятую таблицу и все еще получил ту же ошибку усечения. Затем я установил ANSI_WARNINGS OFF, и данные вставки в таблице выглядят хорошо. Теперь, когда я пытаюсь удалить эту строку, я получаю сообщение об ошибке усечения.

Мой вопрос, помимо основного ввода в ситуацию, заключается в том, как я могу отключить ANSI_WARNINGS в SSIS, чтобы можно было выполнить массовую загрузку?

Ответы [ 4 ]

2 голосов
/ 02 апреля 2009

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

Можете ли вы проверить, так ли это или нет?

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

Можете ли вы выбрать LEN из всех столбцов в представлении? Это может помочь найти проблему.

Кроме этого, единственный способ, который я нашел, - это распечатать отчет о фактической длине столбцов исходных данных.

2 голосов
/ 02 апреля 2009

Звучит так, как будто у вас есть одна строка (возможно, больше, но она занимает только одну!), Где значение ваших данных превышает длину столбцов таблицы. Выполнение преобразования данных в более короткий тип переместит ошибку в любое преобразование, которое выполняет преобразование из пункта назначения. Что я бы порекомендовал, так это создать назначение для плоского файла и привязать к нему вывод ошибок ваших преобразований. Измените результат ошибки на «Перенаправить строку». Это позволит всем действительным строкам пройти и предоставить вам копию строк, которые усекаются для обработки вручную.

1 голос
/ 02 апреля 2009

Есть ли на столе триггеры, в которые вы вставляете? Тогда ошибка может произойти из-за действия, которое выполняет триггер.

0 голосов
/ 02 апреля 2009

Оказывается, что в SSIS вы можете настроить адресата OLE DB с помощью «Режим доступа к данным> Таблица или представление: Быстрый режим». Когда я выбрал этот параметр, массовая вставка прошла без каких-либо предупреждений или ошибок, и данные отлично выглядят в базе данных. Не уверен, что именно это изменение сделало точно, но оно сработало, и после 16 часов на одной вставке служб SSIS я доволен результатами.

Спасибо за предложения.

...