2008-09-09 5 views
21

Я пытаюсь сделать пакет DTS для передачи данных между двумя базами данных на одном сервере, и я получаю следующие ошибки. Iv прочитал, что генерируемая ошибка с несколькими шагами OLE DB может возникать при переходе между различными типами баз данных, и есть потеря точности, но здесь это не так. Как просмотреть метаданные столбца?Как исправить ошибки операции OLE DB с несколькими шагами в SSIS?

Error: 0xC0202009 at Data Flow Task, piTech [183]: An OLE DB error has occurred. Error code: 0x80040E21. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E21 Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

Error: 0xC0202025 at Data Flow Task, piTech [183]: Cannot create an OLE DB accessor. Verify that the column metadata is valid.

Error: 0xC004701A at Data Flow Task, DTS.Pipeline: component "piTech" (183) failed the pre-execute phase and returned error code 0xC0202025.

ответ

0

Вы можете использовать SELECT * FROM INFORMATION_SCHEMA.COLUMNS, но я подозреваю, что вы создали базу данных назначения из сценария исходной базы данных, так что весьма вероятно, что они столбцы будут одинаковыми.

Некоторые сравнения могут что-то принести.

Такие ошибки иногда возникают из-за попытки вставить слишком много данных в столбцы varchar.

3

Этот запрос должен определить столбцы, которые являются потенциальными проблемами ...

SELECT * 
FROM [source].INFORMATION_SCHEMA.COLUMNS src 
    INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst 
     ON dst.COLUMN_NAME = src.COLUMN_NAME 
WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH 
0

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

SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH

и обнаружил, что мои столбцы, где немного отличаются с точки зрения размеров символов и т.д. Затем я попытался изменить таблицу новой структуры таблицы, которые не работают. Затем я перенес данные из старой базы данных в Excel и импортировал данные из excel в новую БД, которая работала на 100%.

34

Посмотрите на приличия полей (тип, длина, значение по умолчанию и т. Д.), Они должны быть одинаковыми.

У меня была эта проблема с SQL Server 2008 R2, потому что длина полей не равна.

+3

+1 - это отлично работает. Я просто разрешил ту же ошибку, выставив тип «memo» (из моего источника доступа db) в тип «DT_WSTR» в SSIS - используя производный столбец. Наличие моей строки в качестве типа «DT_WSTR» отлично работало при сохранении строки в качестве nvarchar в моей базе данных SQL 2008 R2. – 2011-10-08 15:35:53

+0

Моя проблема была аналогичной - копирование из базы данных SQL 2012 в таблицу MS Access. Тип назначения был Text, который, как я не понимал, имел ограничение в 255 символов. Я изменил тип адресата на Memo, чтобы удалить это ограничение, и копия данных была успешной. – 2017-03-16 14:09:32

7

Эта ошибка распространена, когда исходная таблица содержит столбец TEXT, а целью является нечто иное, чем столбец TEXT. Это может быть настоящим людоедом, если вы еще не сталкивались (или не забывали!).

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

-1

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

-1

Я получил эту ошибку при передаче csv в mssql Я преобразовал столбцы в DT_NTEXT и некоторые столбцы на mssql, где установлено значение nvarchar (255).

установка их на nvarchar (max) разрешила его.

0

Также проверьте, нет ли сценария в командах разделителя партий (удалите инструкции «GO» в одной строке).

0

'-2147217887' message 'IDispatch error #3105' source 'Microsoft OLE DB Service Components' description 'Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.'."

Это то, что я также сталкивается. Проблема возникла из-за того, что я сменил поставщика SQLOLEDB.1 на SQLNCLI11 без, указав режим совместимости в строке подключения. Когда я установил этот DataTypeCompatibility=80; в строке подключения, я решил проблему.

1

Эта проблема будет вызвана главным образом из-за пустых строк в конце файла, удалите их и запустите задание.