Ошибки при использовании BCP с SQL Server 2008 R2 - PullRequest
0 голосов
/ 24 мая 2018

Я работаю со старой базой кода, которая устанавливает базу данных SQL с тестовыми данными.В коде есть некоторые командные файлы и файлы SQL, которые настраивают вещи, и я не могу понять, почему не удается добавить данные.Важно отметить, что это часть процесса установки, который я использовал ранее, который раньше работал без проблем.С тех пор я переустанавливал Windows (Windows 10 Enterprise, ранее Windows 7 Pro).В проекте используется SQL Server 2008 R2 (10.50.4042.0).

Вот SQL, который создает таблицу

PRINT 'Creating Table VersionHistory'
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[VersionHistory](
    [Id] [uniqueidentifier] NOT NULL,
    [VersionNumber] [varchar](50) NOT NULL,
    [VersionSequence] [int] NOT NULL,
 CONSTRAINT [PK_VersionHistory] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO

А вот входные данные (разделенные табуляцией):

42E8397A-F913-402C-9F5D-013B0D78215C    1.0.1.13060 1
8BA50B6A-1813-42D5-A7F0-2EEC55D8A7CC    1.0.11.15222    13
B296B89F-CF3E-4A68-8A19-3440B67AEB84    1.0.9.14324 11
3299D4CD-E949-464B-B65B-4597FA5ED9D0    1.0.10.15091    12
ADE81361-41B9-42F8-BBF8-4A9A3E32AF2F    1.0.5.13331 7
4EFB3E84-DE22-4D34-BD7B-7E7294540487    1.0.1.13087 2
5AF55EE2-8D35-43F8-929C-9AD4BA256EC6    1.0.8.14233 10
97F98EAF-2CC1-42A2-A331-9B5E62AD52DF    1.0.3.13234 6
B31E1B3C-C556-431B-BE69-BF49758FF649    1.0.7.14146 9
1AA59F90-5F90-4058-8359-CBF79405649B    1.0.6.14056 8
46C3FD09-2E9E-4BBF-B800-D19DFB730A17    1.0.1.13150 5
D69E8D07-76DF-4698-ADBB-D48A7B8290B7    1.0.1.13105 3
31C975EA-FEF5-482D-B022-E631F56159CE    1.0.1.13116 4

Пакетный файл пытается добавить входные данные со следующей строкой:

bcp CLIENTDB.dbo.VersionHistory in "H:\PATH\TO\FILE\VersionHistory_Data.txt" -S .\sql2008r2 -U user -P password -E -c -e errors.txt

И происходит сбой со следующей ошибкой:

Starting copy...
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Invalid character value for cast specification

И в файле ошибок:

#@ Row 1, Column 3: Invalid character value for cast specification @#

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

Я убедился, что версия используемого bcp была установлена ​​SQL Server 2008

> where bcp
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\bcp.exe

Так что ответ, объясняющий, что необходимо изменить, чтобы этот вызов работал правильно, был быадекватное решение.Ответ, который предполагает, почему это могло когда-то работать без проблем, или убедительно показывает, что это никогда бы не сработало, был бы невероятным.Спасибо за потраченное время.


FAQ:

Q: Почему SQL Server 2008 R2

A: Это то, что использовал оригинальный проект, над которым я работаюплотный график, есть десятки sql-файлов и хранимых процедур, я не уверен, что у меня есть время, чтобы исследовать, что нужно изменить, чтобы использовать более новую версию SQL Server.

ОБНОВЛЕНИЕ:

Решение

Файлы данных с разделителями табуляции ранее имели окончание строк CR + LF, а затем фиксировали репо и переключались на окончания строк в стиле Unix.Я понял, что это случилось с некоторыми файлами, но не знал, что это случилось со всей базой кода во время коммита.Команды BCP выполняются без проблем, если файлы возвращаются в окончания CR + LF или если к команде BCP применяется дополнительный флаг -r 0x0a.

1 Ответ

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

#@ Row 1, Column [last column number]: Invalid character value for cast specification @# может указывать на неправильное окончание строки - LF или CR, а не Windows по умолчанию CR + LF.

В этом вопросе обсуждается, как преобразоватьфайлы. В этом вопросе обсуждается, как что-то исправить в Git, если это источник ваших ошибочно измененных файлов.

Без изменения файлов самое простое решение - передать -r 0x0a или -r 0x0dв BCP, который заставит его использовать чистый LF или чистый CR в качестве разделителя строк (соответственно).

...