Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据表的固定长度文本文件_Sql_Sql Server 2008_Stored Procedures_Xml Parsing - Fatal编程技术网

SQL数据表的固定长度文本文件

SQL数据表的固定长度文本文件,sql,sql-server-2008,stored-procedures,xml-parsing,Sql,Sql Server 2008,Stored Procedures,Xml Parsing,我有一个约100000多行的文本文件,其中每一列都是固定长度的,我需要将其放入SQL Server数据库表中。我们的每个客户机都需要获取这些数据,但每个文本文件略有不同,因此我们必须手动进入并调整SQL存储过程中的字符间距 我想知道是否有一种方法可以替代使用XML/XSD/XSLT。这样,我就不必进入并手动编辑存储过程 我们目前所做的是: 1.) SQL server stored procedure reads a text file from the disk 2.) Each record

我有一个约100000多行的文本文件,其中每一列都是固定长度的,我需要将其放入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
另一个客户端的文本文件将具有以下内容:

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

它们基本上都有相同的字段,有些字段可能多一些,有些字段少一些,只是顺序不同。

使用SQL Server xml处理函数导入固定长度的文本文件似乎是一种倒退的做法,无意冒犯

您不需要构建自己的应用程序,Microsoft已经为您构建了一个应用程序。它的名字很巧妙。如果需要,您可以创建一个通知BCP实用程序如何导入数据的文件。最好的一点是它的速度快得离谱,您可以从远程计算机将数据导入SQL Server,因为文件不必位于SQL Server框中即可导入

为了解决您需要能够更改列宽的问题,我认为编辑格式文件不会太糟糕


理想情况下,您将能够使用分隔格式而不是不断变化的固定长度格式,这将使事情变得更加容易。对于您来说,将数据导入excel并以分隔格式保存,然后再从excel开始,可能既快捷又简单。

excel,Access,所有VB和C版本都有易于使用的驱动程序,用于将文本文件视为虚拟数据库表,通常带有用于映射列的可视化辅助工具。读写SQL Server当然是小菜一碟。我从那里开始

10万行应该不会是问题,除非您每小时为几个客户端执行一次。

我在寻找CSV解析器时遇到过。我链接的示例向您展示了如何使用带有属性的基本POCO来表示您试图解析的文件。因此,您需要一个特定于客户的POCO来解析他们的文件


我自己也没有试过,但可能值得一看。

您能演示一下文本文件中的差异吗?也许这将有助于解决问题。我不确定这是否可行,但您是否研究过批量插入命令?我们以前使用批量插入,但它需要一系列权限,当它决定移动数据库、文件和文件夹时,这些权限有时会被忽略。我想我不理解这个问题-手动编辑存储过程的原因是什么?如果要在数据库表中插入一些文本数据,使用XML的目的是什么?存储过程从较长的字符串/记录中解析出不同的值,然后将它们插入表中。我提出XML时认为,也许在应用程序级别进行解析,然后将XML传递到数据库可能更有效。你能给我一个这样一个驱动程序的例子吗?这里有一个完整的例子,从ODBC到LINQ。将任何首字母缩略词与你想要的源类型和目的地结合起来,谷歌应该是你的朋友。