Получение ошибки при массовой вставке - PullRequest
0 голосов
/ 03 мая 2018

Я получаю сообщение об ошибке при попытке выполнить массовую вставку:

BULK INSERT #tbl_InterCompanyUploadDetail_Staging 
FROM '\\SVRP03546008461D\QA\UploadTemplatewithvalidation.xlsx'
 WITH (FIRSTROW = 6, FIELDTERMINATOR ='\t', ROWTERMINATOR ='\\n' )

Ошибка, которую я получаю:

Ошибка преобразования данных массовой загрузки (усечение) для строки 6, столбца 2 (код компании Oracle).

Столбец в Excel содержит данные 470, а в столбце базы данных - varchar (10). Так что может быть причиной ошибки.

Ответы [ 4 ]

0 голосов
/ 10 мая 2018

выпуск

BULK INSERT может не работать с файлами xlsx, попробуйте преобразовать файл .xlsx в файл .csv, чтобы добиться этого (используя BULK INSERT)

1-е решение - с помощью OPENROWSET

Попробуйте использовать OPENROWSET с Microsoft.ACE.OLEDB.12.0 провайдером:

Insert into <rawdatatable> 
select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
                         'Excel 12.0;Database=D:\SSIS\FileToLoad.xlsx;HDR=YES', 
                         'SELECT * FROM [Sheet1$]')

OR

SELECT * INTO Data_dq
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0; Database=D:\Desktop\Data.xlsx', [Sheet1$]);

2-е решение - с использованием OPENDATASOURCE

SELECT * INTO Data_dq
FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',
'Data Source=D:\Desktop\Data.xlsx;Extended Properties=Excel 12.0')...[Sheet1$];

Ссылки

0 голосов
/ 07 мая 2018

Я сомневаюсь, используя файл XLSX с BULK INSERT. Если файл XLSX поддерживается, то FIELDTERMINATOR и ROWTERMINATOR не нужны.

XLSX - это zip-файл, поэтому я думаю (но не уверен), что XLSX не поддерживается, и вы получаете ошибку усечения, потому что он читает его как чистый текстовый файл, а BULK INSERT получает длинный текст до FIELDTERMINATOR.

Для подтверждения вы пытаетесь увеличить длину столбца до нескольких тысяч символов и запускаете BULK INSERT, если вы получаете символ мусора, то он читает его как чистый текстовый файл. символ мусора может быть таким же, как вы открываете один и тот же файл xlsx в блокноте или блокноте ++.

0 голосов
/ 08 мая 2018

Вы не можете массово загрузить XLSX в SQL Server. Вы МОЖЕТЕ конвертировать XLSX в текстовый файл с разделителями табуляции и массовую загрузку.

Если это разовая операция, я бы рекомендовал сначала преобразовать в текст (но учтите, что Excel экспортирует определенные типы, такие как даты и большие числа). Или вы можете использовать мастер импорта / экспорта (https://docs.microsoft.com/en-us/sql/relational-databases/import-export/import-data-from-excel-to-sql)

Если вы хотите повторить этот процесс, я бы создал скрипт SSIS.

0 голосов
/ 07 мая 2018

Замените "\ n" на "0x0a" в качестве ROWTERMINATOR и повторите попытку.

Или также

 ROWTERMINATOR = '''+cast (0x0000 as char(1))+'''

Дайте мне знать, если это работает.

Проверьте также это .

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