0
BCP是經常讓我感到困擾的事情,經過大量嘗試,我正在建立一個簡單的測試,導致「無效的字符值用於投射規範」錯誤。似乎無法找出問題所在。使用xml格式文件將BCP文件導入到SQL表中導致錯誤
首先,我有一個SQL Server表
CREATE TABLE [dbo].[customDataFromAPI](
[id] [int] IDENTITY(1,1) NOT NULL,
[periodStartUTC] [datetimeoffset](7) NULL,
[M1] [nvarchar](50) NULL,
[M2] [nvarchar](50) NULL,
[M3] [nvarchar](50) NULL,
[M4] [nvarchar](30) NULL,
[M5] [nvarchar](40) NULL,
[M6] [nvarchar](30) NULL,
[M7] [bigint] NULL,
[M8] [bigint] NULL,
CONSTRAINT [PK_customDataFromAPI] PRIMARY KEY CLUSTERED
(
[id] ASC
)
我也有以下CSV文件爲樣本,
PeriodStart,C1,C2,C3,C4,C5,C6,C7,C8
2014-04-01T04:00:00.000Z,Kuber TEST,Another String Text Field,Quebec,Internal Server Name222,test service,TestingNowss,123178594823,12312
我使用BCP導入此XML格式的文件:
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="24"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30"/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="40"/>
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30"/>
<FIELD ID="7" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50"/>
<FIELD ID="8" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="18"/>
<FIELD ID="9" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="18"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="periodStartUTC" xsi:type="SQLDATETIMEOFFSET"/>
<COLUMN SOURCE="7" NAME="nbiApplicationType" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="applicationType" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="applicationProtocol" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="elementCluster" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="element" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="6" NAME="clientDevice" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="8" NAME="totalBytesDown" xsi:type="SQLBIGINT"/>
<COLUMN SOURCE="9" NAME="totalBytesUp" xsi:type="SQLBIGINT"/>
</ROW>
</BCPFORMAT>
我正在運行以下BCP命令:
bcp SERVER_NAME.dbo.customDataFromAPI in C:\test_dataFile.csv -t, -f C:\test_format.xml -S SERVER_NAME -T -F2
我試圖使用SSIS,它工作的很好,但是它非常慢,因爲我有大約2億個這樣的行來處理。作爲另一種選擇,我想了解並放置bcp進行測試,但到目前爲止甚至無法導入單行數據。有時候我也遇到臭名昭着的BCP的EOF錯誤,不知道發生了什麼。
使用視圖的好建議。不幸的是,我仍然得到'鑄造規格的無效字符值'錯誤。 – kbs7 2014-09-26 15:19:56
@ kbs7這很奇怪,因爲它爲我工作。如果你添加'-e error_log.txt',你會得到一個帶有錯誤信息的日誌文件,它可能更有用(它應該指出錯誤的確切列)。 – jpw 2014-09-26 15:23:25
好吧,所以這是第一個datetimeoffset列有數據的格式爲'2014-04-01T04:00:00.000Z'的錯誤。我試圖刪除'Z',並放置一個空格而不是'T',它工作。儘管當我直接插入SQL中的格式時,它可以工作! – kbs7 2014-09-26 15:31:40