【问题标题】:SQL Server insert from flat fileSQL Server 从平面文件插入
【发布时间】:2015-03-12 20:29:04
【问题描述】:

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

我有以下字段:

   ID Param1  Param2 

它需要进入表格的方式并不那么简单。 它需要进入

   ID Param1   5655 DateTime
   ID Param2   5555 DateTime

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

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

【问题讨论】:

  • 你能用excel快速按摩文件吗?
  • 或使用任何记录击键的文本编辑器进行按摩。另一种方法是将它作为它导入到临时表中,然后对其进行查询以将其放入您需要的表中。
  • 通过在 sql server 中创建临时表以通过 XML 一次性传递数据来模拟批量插入,这很容易做到。您也可以通过拆分数据并将其存储到具有 3 个字段的类,然后从那里将数据插入数据库.. 你能告诉我们你自己实际尝试过的内容与等待我们中的一个人的回答吗
  • 您可以使用 SSIS 和 UNPIVOT 转换来做到这一点。

标签: c# sql-server


【解决方案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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-11
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多