2012-02-29 86 views
0

我有一个文本文件(〜100,000 +行),其中每列都是固定长度,我需要将它放到SQL Server数据库表中。我们的每个客户都需要获取这些数据,但每个文本文件略有不同,所以我们必须手动进入并调整SQL存储过程中的字符间距。固定长度的文本文件到SQL数据表

我想知道是否有方法可以改用XML/XSD/XSLT。这样,我不必进入并手动编辑存储过程。

我们目前做的是这样的:

1.) SQL server stored procedure reads a text file from the disk 
2.) Each record is split into an XML element and dumped into a temporary table 
3.) Using SQL Server's string manipulation, each element is parsed 
4.) Each column is dumped into 

为了清楚起见,这里有几个例子...

一台客户机的文本文件将包含以下内容:

Name [12 Characters] 
Employer [20 Characters] 
Income [7 Characters] 
Year-Qtr [5 Characters] 

JIM JONES HOMERS HOUSE OF HOSE100000 20113 

另一个客户的文本文件将具有以下内容:

Year-Qtr [5 Characters] 
Income [7 Characters] 
Name [12 Characters] 
Employer [20 Characters] 

20113100000 JIM JONES HOMERS HOUSE OF HOSE 

他们基本上都有相同的领域,有些可能有更多的是少一些,只是以不同的顺序。

+1

您可以证明文本文件有所不同吗?也许这将有助于冲出一个解决方案。 – 2012-02-29 18:41:44

+0

我不确定这是否会起作用,但是您是否查看了“BULK INSERT”命令? http://msdn.microsoft.com/en-us/library/aa225968%28v=sql.80%29。aspx – 2012-02-29 19:48:12

+0

我们曾经使用BULK INSERT,但它需要一堆权限,当IT决定移动数据库,文件和文件夹时,这些权限有时会被忽略。 – Jim 2012-02-29 20:06:41

回答

0

使用SQL Server xml处理函数导入固定长度的文本文件看起来像是一种倒退的做事方式(没有冒犯)。

您不需要构建自己的应用程序,Microsoft已经为您构建了一个应用程序。它巧妙地被称为BCP Utility。如果需要,您可以创建一个format file,告诉BCP实用程序如何导入数据。最好的部分是它的速度非常快,你可以从远程机器上将数据导入到SQL Server中(因为文件不一定要位于SQL Server框中才能导入)

为了解决你需要能够改变列的宽度,我不认为编辑格式文件会不好。

理想情况下,您将能够使用分隔格式而不是固定长度的格式,这会使事情变得更容易。将数据导入到excel并将其保存为分隔格式,然后从那里开始,可能会很快并且很容易。

0

Excel,Access,VB和C#的所有功能都具有易于使用的驱动程序,可将文本文件视为虚拟数据库表,通常使用可视化帮助来映射列。读取和写入SQL Server当然是蛋糕。我会从那里开始。

100K行不应该是一个问题,除非可能你每小时为几个客户做它。

+0

你能给我一个这样的驱动程序的例子吗? – Jim 2012-04-10 00:16:32

+0

这里有一个从ODBC到LINQ的完整代码。将任何首字母缩略词与您想要的来源类型和目的地结合起来,并且Google应该成为您的朋友。 http://devblog.virtage.com/2009/02/microsoft-database-technologies-babylon-odbc-ole-db-ado-jet-isam-mdac-linq/ – dkretz 2012-04-10 01:45:06

0

我偶然遇到了File Helpers,当时我正在寻找一个CSV解析器。我已链接的示例向您展示了如何使用用属性装饰的基本POCO来表示您尝试解析的文件。因此,您需要一个客户特定的POCO来解析他们的文件。

我还没有尝试过这个,但它可能值得一看。

相关问题