У меня есть следующий код, чтобы сделать объемную вставку в SQL Server (taken from the example at the bottom of here):Массовая вставка неудача: Явное значение должно быть указано
SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard ON
EXECUTE XP_CMDSHELL 'BCP AT100Reporting.dbo.Reported_Driver_ScoreCard out D:\temp\Reported_Driver_ScoreCard.txt -T -n'
BULK INSERT [dbo].Reporting_DriverScoreCard
FROM 'D:\temp\Reported_Driver_ScoreCard.txt'
WITH
(
DATAFILETYPE = 'native',
ERRORFILE = 'D:\temp\error.txt',
MAXERRORS = 10000
);
SET IDENTITY_INSERT [dbo].Reporting_DriverScoreCard OFF
Однако, когда я запускаю эту команду, она потерпит неудачу и дать мне это сообщение об ошибке:
Explicit value must be specified for identity column in table 'Reporting_DriverScoreCard' either when IDENTITY_INSERT is set to ON or when a replication user is inserting into a NOT FOR REPLICATION identity column.
Я думаю, что это происходит потому, что есть дополнительная линия на конце текстового файла создается таким образом он пытается вставить пустую строку, когда он попадет в конец файла (и все остальные строки имеют идентификаторы s et для них.)
Есть ли способ заставить это работать правильно, поскольку у меня есть несколько массивных dbs, которые я пытаюсь использовать?
Вы проверили там * есть * дополнительная строка? Предоставляет ли файл идентификационные значения, как указано в сообщении? Как быстро BULK INSERT выполняется за считанные секунды? Неудачно ли оно или в конце? – usr
В конце этого не получается, я добавил следующие значения в выражения '-e' в BCP и' KEEPIDENTITY' в объемную вставку, но я не могу проверить файл, поскольку он слишком велик, чтобы открыть – Pete
Используйте шестнадцатеричный редактор или скопировать только первый и последний мега файл в новое место. Или экспортируйте меньше данных с помощью представления или запроса. – usr