代码之家  ›  专栏  ›  技术社区  ›  Stefan

根据数据找出字段类型

  •  0
  • Stefan  · 技术社区  · 15 年前

    我正在做一个从一个系统到另一个系统的一次性导入例程。第一步是从大量csv文件导入大量数据。每个csv文件中的第一行是字段名选项卡分隔的。其余的是数据,也用制表符分隔,行用CR分隔。

    我编写了一个20行程序,用于创建表并将数据读入sql数据库。我将所有只包含数字数据且字段名中有“ID”的字段设置为INT,其余字段设置为NVARCHAR(255)。

    现在我想对它进行优化,以便它查看数据,并尝试找出每列中包含的数据类型。有时间、日期、id字段、文本字段和数字字段。

    我知道如何做到这一点,这相当容易,但我想知道在这方面是否有一些工作要做,是否有一些类可以处理这一点。

    找出首选的尺寸更难。我想我必须这么做 1.查看所有行并找出每列的最长数据。 2.有一个查找表,我在其中映射例如长度0-50为100,长度51-255为255等等。

    有人对此有什么聪明的建议吗?正如我所说的,这并不是什么特别难做的事情,但最好能将其制作成一个智能库,以便稍后在其他导入场景中使用。

    2 回复  |  直到 9 年前
        1
  •  1
  •   JeeBee    15 年前

    我会运行一个预处理阶段-分析CSV文件中的数据,以确定nvarchar的合理容量-例如,nvarchar(20)或nvarchar(2000)。我会让它打印一个报告,每个列都有一个示例条目,甚至可以生成“CREATETABLE”SQL语句,您可以在运行之前手动编辑该语句。如果列中的每个条目都格式化为数字,则将其设置为int,依此类推。

        2
  •  1
  •   aSkywalker    15 年前

    你考虑过ADO.NET吗?您可以将数据读入数据集吗?

    连接字符串如下所示: “Provider=Microsoft.Jet.OLEDB.4.0;数据源=C:\TxtFile\;Extended Properties='text;HDR=Yes;FMT=Delimited'” 注意HDR=YES,这是您需要的。

    然后,当您连接到某个目录时,可以使用select语句,如:

    “从data.txt中选择*”

    ImportMixedTypes=文本

    我还在Excel文件上使用了SQL导入表(在Excel中打开csv文件后保存)。这也行。尽管没有什么能完美地工作——有时我仍然发现使用一些手动编码和自己检查列数据更容易。