SQL Server从平面文件插入

时间:2015-03-12 20:29:04

标签: c# sql-server

我有一些需要导入SQL Server的数据。

我有以下字段:

   ID Param1  Param2 

它需要进入桌面的方式并不那么直截了当。 它需要进入

   ID Param1   5655 DateTime
   ID Param2   5555 DateTime

因此,它需要在输入文件的一行中向表中插入2条记录。想知道在SQL Server中执行此操作的最佳方法是导入文件。我可以做一个BULK INSERT,但我的列需要完全匹配。就我而言,它不是

我也在使用.NET C#。想知道是否将文件导入数据表等,然后使用foreach查看进一步操作它可能是最好的方法。

2 个答案:

答案 0 :(得分:1)

由于您使用的是C#,因此您可以使用表值参数以您喜欢的任何方式流式传输数据。您可以从文件中读取一行,将其拆分,然后传入2行而不是将列1到1映射。我在此答案中详细介绍了类似的方法:

How can I insert 10 million records in the shortest time possible?

这里的主要区别在于,在while方法内的GetFileContents()循环中,您需要两次调用yield return,每件一次。

答案 1 :(得分:1)

由于这个问题对我来说有点不清楚,但如果我能帮到你,那么有很多方法可以做到这一点,一个简单的方法是使用临时表:

创建临时表:

CREATE TABLE #TBL (ID int, param1 datetime, param2 datetime);

从文件批量插入临时表

BULK INSERT #TBL FROM 'D:\data.txt' WITH (FIELDTERMINATOR = ' ');

现在您可以使用临时表上的特定查询插入永久表(假设您的表结构为:(ID,param)):

INSERT INTO TABLE_NAME(id,PARAM)
SELECT DISTINCT T.ID,T.PARAM1
FROM #TBL
UNION 
SELECT DISTINCT T.ID,T.PARAM2
FROM #TBL