2012-02-29 84 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來解析他們的文件。

我還沒有嘗試過這個,但它可能值得一看。

相關問題