Я работаю со старой базой кода, которая устанавливает базу данных 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.