У меня есть объемная вставка, которая работает на SQL Server 2000, которую я пытаюсь запустить на SQL Server 2008 R2, но она не работает как Я надеялся. Я успешно работает эти объемные вставки в SQL Server 2000 со следующим:В объемной вставке SQL Server, как использовать более высокие символы ASCII для терминаторов Field и Row
Формат файла:
8.0
9
1 SQLCHAR 0 0 "ù" 1 Col1 ""
2 SQLCHAR 0 0 "ù" 2 Col2 ""
3 SQLCHAR 0 0 "ù" 3 Col3 ""
4 SQLCHAR 0 0 "ù" 4 Col4 ""
5 SQLCHAR 0 0 "ù" 5 Col5 ""
6 SQLCHAR 0 0 "ú" 6 Col6 ""
7 SQLCHAR 0 0 "" 0 Col7 ""
8 SQLCHAR 0 0 "" 0 Col8 ""
9 SQLCHAR 0 0 "" 0 Col9 ""
файл данных:
101ù110115100ùC02BCD72-083E-46EE-AA68-848F2F36DB4Dù0ù1ùCú
Bulk команда вставки:
bulk insert Database1.dbo.Table1
from 'C:\DataFile.dat'
with
(
formatfile = 'C:\FormatFile.fmt'
, tablock
, check_constraints
, maxerrors = 0
)
Теперь, когда я работаю на ядре SQL 2008 R2, я получаю следующую ошибку:
Bulk load: An unexpected end of file was encountered in the data file.
Если я меняю поле терминаторов из 249 ASCII (U) в запятые (,) и изменить мои строки терминаторов из ASCII 250 (U) до точки с запятой (;), все будет работать. Тем не менее, это не вариант (данные, безусловно, будут содержать эти символы), и я бы предпочел не выбирать какую-либо произвольную строку, например: @ # $%^& *() для моих разделителей (нужно отредактировать больше кода сюда).
Я пробовал несколько комбинаций кодовой страницы, файла данных, сопоставления, уровня совместимости sql и формата файла, но безрезультатно (не то, что у меня есть опыт, чтобы знать, как все это будет взаимодействовать, чтобы что-то изменить здесь). Различные части объемных вставных документов MSDN относятся к специальным правилам, касающимся символов ascii, превышающих 127 или менее 32, но я не могу понять, как это повлияет на разделители.
Что я могу сделать, чтобы набрать как можно меньше кода, но заставить его работать на моем новом сервере?
UPDATE (раствор)
Благодаря комментарий @Adam Венгера, я нашел решение. Чтобы иметь дело с имеющимися extended ASCII символами в моих данных, я больше не использую файл формата, и я пишу файл данных объемной вставки как unicode (не ANSI) в файловую систему (хотя в моих данных нет никаких символов unicode). Вот мое новое заявление основной вставки (уведомление «WideChar»):
bulk insert Database1.dbo.Table1
from 'C:\DataFile.dat'
with (
check_constraints
, datafiletype = 'widechar'
, fieldterminator = 'ù'
, maxerrors = 0
, rowterminator = 'ú'
, tablock
)
Я не мог получить формат файл для работы с расширенными символами ASCII (выше 127), независимо от того, что я пытался. Я просто избавился от файла формата и теперь помещаю дополнительные разделители полей в свой файл данных для представления столбцов, которые я не импортирую (у меня есть значения по умолчанию для этих столбцов).
Посмотрите на указание 'DATAFILETYPE = 'widechar'' внутри блока' WITH'. [Эта статья] (http://msdn.microsoft.com/en-us/library/ms188289.aspx) выглядит многообещающей. –
@ Адам Венгер, ты указал мне в правильном направлении. Благодаря! Не стесняйтесь создавать ответ с комбо из вашего предложения и моего обновления. –