Есть ли способ принудительно вставить усеченные столбцы в таблицу SQL Server? - PullRequest
1 голос
/ 26 апреля 2011

Данные предоставлены мне в виде электронной таблицы, которую я конвертирую в файлы с разделителями. Я попытался вставить более 46000 строк, но четыре (4) из них не удалось с сообщением об ошибке

SQLState = 22001, NativeError = 0 Ошибка = [Microsoft] [собственный клиент SQL] Строковые данные, усечение справа

Было бы хорошо узнать, какие строки терпят неудачу. Есть ли способ, которым я могу либо принудительно вставить эти строки с усеченными строками, либо определить, какие из них терпят неудачу с BCP?

  1. Я пытался построить вставить операторы в файл XLSX с КОНКАТЕНАТОМ. Это не удается, потому что У меня слишком много параметров для CONCANTENATE.
  2. Я пробовал запятую и файлы с разделителями табуляции, которые терпят неудачу потому что некоторые данные имеют те символы.
  3. Я наконец-то построил разделенную трубой файлы после изменения настройки локализации, чтобы я мог сделать это с Excel ( Как сохранить Электронная таблица Excel как ), разделенный по конвейеру, а затем импортировать их в таблицу с помощью bcp TableName in MyCreatedCSVFile.csv -T -c -t^| <- мне пришлось экранировать | символ в командной строке с ^. </li>

Есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Используете ли вы промежуточный стол?

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

INSERT Finaltable (..)
SELECT (..), LEFT (offendingcolumn, 100) FROM Stagingtable

Хранимая процедура также может быть использована для выполнения BULK INSERT, затем некоторых проверок, а затем INSERT в финальную таблицу.

0 голосов
/ 30 июля 2013

Мне удалось сделать это путем создания триггера «Вместо».

Я создал таблицу с varchar (max), чтобы убедиться, что я не получил усечения.Затем я создал триггер вместо вставки (так что эта таблица прокси никогда не получит строки).

В триггере я выполняю преобразование (varchar (50), name255).То есть: выполнять усечение явно.

Однако это означает, что вам нужно указать "FIRE_TRIGGER" с помощью команды BCP.

Как это помогает.

0 голосов
/ 26 апреля 2011

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

...