我有一个文本文件(~100,000 +行),其中每列都是固定长度,我需要将它放入SQL Server数据库表中。我们每个客户都需要获取这些数据,但每个文本文件略有不同,因此我们必须手动进入并调整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
他们基本上都有相同的字段,有些可能还有一些更少,只是订单不同。
答案 0 :(得分:0)
使用SQL Server xml处理函数导入固定长度的文本文件似乎是一种倒退的做事方式(没有冒犯)。
您不需要构建自己的应用程序,Microsoft已经为您构建了一个应用程序。它被巧妙地称为BCP Utility。如果需要,您可以创建一个format file,告诉BCP Utility如何导入您的数据。最好的部分是它的速度非常快,您可以从远程计算机将数据导入SQL Server(因为文件不必位于SQL Server框中以导入它)
为了解决您需要能够更改列宽的问题,我认为编辑格式文件不会很糟糕。
理想情况下,您可以使用分隔格式而不是不断变化的固定长度格式,这将使事情变得更加容易。您可以快速轻松地将数据导入excel并以分隔格式保存,然后从那里开始。
答案 1 :(得分:0)
Excel,Access,VB和C#的所有风格都有易于使用的驱动程序,用于将文本文件视为虚拟数据库表,通常使用可视化辅助工具来映射列。读取和写入SQL Server当然是蛋糕。我会从那里开始。
100K行应该不是问题,除非你可能每小时为几个客户做这件事。
答案 2 :(得分:0)
我在寻找CSV解析器的过程中偶然遇到File Helpers。我链接的示例向您展示了如何使用用属性修饰的基本POCO来表示您尝试解析的文件。因此,您需要一个客户特定的POCO来解析他们的文件。
我自己没试过,但值得一看。