0
我使用SQL Server 2008并有一个包含5个字符类型列的表。SQL Server BULK INSERT固定长度字符数据
CREATE TABLE [dbo].[deviceDataBulk](
[f1] [char](9) NULL,
[f2] [char](5) NULL,
[f3] [char](7) NULL,
[f4] [char](7) NULL,
[f5] [char](6) NULL)
我也有一个bcp格式的文件;
<RECORD>
<FIELD ID="1" xsi:type="CharFixed" LENGTH="9" COLLATION="Turkish_CI_AS"/>
<FIELD ID="2" xsi:type="CharFixed" LENGTH="5" COLLATION="Turkish_CI_AS"/>
<FIELD ID="3" xsi:type="CharFixed" LENGTH="7" COLLATION="Turkish_CI_AS"/>
<FIELD ID="4" xsi:type="CharFixed" LENGTH="7" COLLATION="Turkish_CI_AS"/>
<FIELD ID="5" xsi:type="CharFixed" LENGTH="6" COLLATION="Turkish_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="f1" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="2" NAME="f2" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="3" NAME="f3" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="4" NAME="f4" NULLABLE="YES" xsi:type="SQLCHAR"/>
<COLUMN SOURCE="5" NAME="f5" NULLABLE="YES" xsi:type="SQLCHAR"/>
</ROW>
我的数据文件包含固定长度的char数据,每行中都没有字段终止符。所以,一个完整的行将是34个字符长。
我的问题是字段4,字段5可能不是每行都有。我可能在该文件中有21个字符的长行或28个字符的长行。
有没有情况下,字段5存在和字段4没有。
文本文件的可能场景是;
f1 f2 f3 f4 f5
f1 f2 f3 f4
f1 f2 f3
我无法BULK INSERT
插入该文件。我希望BULK INSERT
在没有这些字段时插入空值,如果工具到达行尾,只为其余字段插入空值。
如果这是唯一的解决方案可用,哪种方式可以更高效,使用sql server来解析这些char值或编写一个c#windows应用程序并将它解析(从文件逐行读取,解析和插入行)。我试图总结一下情况,实际上,目标表有35列,最后6列可能是空的。数据文件有60行数据。每5分钟我会有一个新的数据文件。 – 2012-04-02 18:52:37
这似乎是唯一的解决方案,选择这种方式,谢谢.. – 2012-04-03 10:59:28
如果你只需要像60行数据我不会太担心性能。虽然SQL在字符串操作(什么语言是?)方面可能不太好,但它在IMHO中做得不错。写35列的声明不会很有趣,虽然= P – deroby 2012-04-03 12:55:08