所以,我有一个具有以下结构的表;
CREATE TABLE [dbo].[LoadAgencyInfo](
[Agency] [varchar](4) NULL,
[Fund] [varchar](1) NULL,
[Account] [varchar](14) NULL,
[LName] [varchar](20) NULL,
[FName] [varchar](9) NULL,
[SSN] [varchar](9) NULL,
[Prior] [varchar](3) NULL,
[BalDue] [varchar](8) NULL,
[DRSBal] [varchar](8) NULL,
[Fill1] [varchar](16) NULL,
[FileDate] [varchar](6) NULL,
[Fill2] [varchar](3) NULL,
[P1] [varchar](2) NULL,
[P2] [varchar](2) NULL
) ON [PRIMARY]
GO
然后我有一个平面文件,我打算批量上传到数据库。文件格式如下,只是一个普通的文本文件,见下文;有几个不同的文件,但它们都遵循这种格式。
样本数据
2000S10000252 VYUSBN RUDXOD 0099882260000006824100000000 181802
2300S20000350 TEVXXXX TGXC 0025045640000000652800000000 052153
该文件应根据字符长度遵循以下格式。每个单元格应根据字符在文件/记录中的位置填充正确的信息。宽度为零填充的记录应填充零。跳过此字段的记录应跳过特定字段,不将任何数据放入单元格。
文件分解
Field Name
Character Start
Character End
Width
Agency
1
4
4
Fund
5
5
1
Account
6
19
14
LName
20
39
20
FName
40
48
9
SSN
49
57
9
Prior
58
60
3 (Zero fill, doesn’t come from text file default to 000)
BalDue
61
68
8
DrsBal
69
76
8 (Zero fill, doesn’t come from text file default to 00000000)
Fill1
77
92
16 (Skip this field)
FileDate
93
98
6
Fill2
99
105
7 (skip this field)
平面文件应该遵循严格的字符长度准则,例如前四个字符属于代理单元格,下一个字符属于基金单元格等。请注意,没有任何分隔字符,所以我我正在使用SQL格式文件来帮助处理记录并将它们输入到数据库中。然而,无论我做什么,适当的单元格要么没有填充,要么部分填充,当我尝试跳过字段时,我跳过的字段会被填充。我尝试将数据类型更改为nvarchar但仍然无法正常工作。有时数据会乱成一团,无法正常翻译。
请参阅下面的格式文件;
<?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="CharFixed" MAX_LENGTH="4" />
<FIELD ID="2" xsi:type="CharFixed" MAX_LENGTH="1"/>
<FIELD ID="3" xsi:type="CharFixed" MAX_LENGTH="14"/>
<FIELD ID="4" xsi:type="CharFixed" MAX_LENGTH="20"/>
<FIELD ID="5" xsi:type="CharFixed" MAX_LENGTH="9"/>
<FIELD ID="6" xsi:type="CharFixed" MAX_LENGTH="9"/>
<FIELD ID="7" xsi:type="CharFixed" MAX_LENGTH="3"/>
<FIELD ID="8" xsi:type="CharFixed" MAX_LENGTH="8"/>
<FIELD ID="9" xsi:type="CharFixed" MAX_LENGTH="8"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Agency" xsi:type="SQLINT" LENGTH="4"/>
<COLUMN SOURCE="2" NAME="Fund" xsi:type="SQLNVARCHAR" LENGTH="1"/>
<COLUMN SOURCE="3" NAME="Account" xsi:type="SQLNVARCHAR" LENGTH="14"/>
<COLUMN SOURCE="4" NAME="LName" xsi:type="SQLNVARCHAR" LENGTH="20"/>
<COLUMN SOURCE="5" NAME="FName" xsi:type="SQLNVARCHAR" LENGTH="9"/>
<COLUMN SOURCE="6" NAME="SSN" xsi:type="SQLINT" LENGTH="9"/>
<COLUMN SOURCE="7" NAME="Prior" xsi:type="SQLINT" LENGTH="3"/>
<COLUMN SOURCE="8" NAME="BalDue" xsi:type="SQLINT" LENGTH="8"/>
<COLUMN SOURCE="9" NAME="DRSBal" xsi:type="SQLINT" LENGTH="8"/>
</ROW>
</BCPFORMAT>
任何帮助,为什么这不起作用将是非常有益的
所以,我已经对SQL格式的xml文件和SQL命令本身进行了一些调整,如下所示。现在的问题是,当我运行命令时,所有相应的字段都被填充,但是第一行中的最后一个单元格获得了所有后续行的数据,因为有超过2000行。应该发生的是在FileDate字段中的第六个字符之后,数据应移动到下一行,而不是将所有后续行放在FileDate字段中。我尝试用0x0a,'n,'r,'r'n,'n'r更新ROWTERMINATOR字段,但似乎没有任何效果。我也很困惑为什么命令不遵守MAX_LENGTH属性,因为我将它设置为6并且为什么没有行终止符不起作用?我已经在这几天了,这让我疯狂。
源文件是来自unix机器的计划文本,并且只有lf作为行终止符。我无法发布数据的图像,因为我没有10个代表点。
XML File
<?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="CharFixed" LENGTH="4" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="14" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="20" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="9" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="6" xsi:type="CharFixed" LENGTH="9" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="7" xsi:type="CharFixed" LENGTH="3" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="8" xsi:type="CharFixed" LENGTH="8" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="9" xsi:type="CharFixed" LENGTH="8" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="10" xsi:type="CharFixed" LENGTH="16" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="11" xsi:type="CharTerm" MAX_LENGTH='6' TERMINATOR="0x0a" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Agency" xsi:type="SQLCHAR" />
<COLUMN SOURCE="2" NAME="Fund" xsi:type="SQLCHAR" />
<COLUMN SOURCE="3" NAME="Account" xsi:type="SQLCHAR" />
<COLUMN SOURCE="4" NAME="LName" xsi:type="SQLCHAR" />
<COLUMN SOURCE="5" NAME="FName" xsi:type="SQLCHAR" />
<COLUMN SOURCE="6" NAME="SSN" xsi:type="SQLCHAR" />
<COLUMN SOURCE="7" NAME="Prior" xsi:type="SQLCHAR" />
<COLUMN SOURCE="8" NAME="BalDue" xsi:type="SQLCHAR" />
<COLUMN SOURCE="9" NAME="DRSBal" xsi:type="SQLCHAR" />
<COLUMN SOURCE="10" NAME="Fill1" xsi:type="SQLCHAR" />
<COLUMN SOURCE="11" NAME="FileDate" xsi:type="SQLNCHAR" />
</ROW>
</BCPFORMAT>