【问题标题】:Is it possible to generate both an FMT and a table from a CSV file?是否可以从 CSV 文件同时生成 FMT 和表格?
【发布时间】:2019-06-12 16:08:41
【问题描述】:

所以我需要一种方法来导入列名、列顺序和列数不同的 CSV。它们将始终是 CSV,当然还有逗号分隔。

是否可以同时生成 FMT 和 CSV 文件的临时表创建脚本?

据我所知,你需要一个或另一个。例如,您需要该表来使用 bcp 实用程序生成 FMT 文件。并且您需要 FMT 文件来为表动态构建创建脚本。

【问题讨论】:

  • 您是说 csv 文件会以意想不到的或“未宣布的”布局/格式出现在您面前吗?或者只是您有许多不同的 CSV 文件要加载,但您提前获得了有关其布局/格式的信息,以便您做好准备?您是否希望动态检查 CSV 并创建要加载的 fmt 文件和表?或者您能否提前创建这些?
  • 但是是的,这是可以做到的,但答案取决于你的具体情况。
  • 第一个问题是的,它们会有意想不到的布局,我想动态创建两者来加载它们。
  • 我没有提前了解他们的布局

标签: sql-server bcp


【解决方案1】:

仅使用 SQL 并动态加载文件文本文件没有快速的方法来做到这一点。我看到一个选项:

  1. 将数据作为单列导入 SQL Server(bcp 输入或使用 t-sql 和 openrowset 加载、SSIS 等...)。请务必在此表中包含作为标识的第二列(我将其称为“row_nbr”)。您将需要它来查找第一行以从文件的标题中获取列名。
  2. 解析第一条记录“where row_nbr = 1”以获取标题记录。您将需要一个字符串解析函数(在线查找或创建您自己的)来对每个列名进行子串化。
  3. 构建动态 SQL 语句以使用已解析的数据创建新表 您刚刚找到的字段数。必须计算长度和使用 一个通用的“varchar”数据类型,因为你不知道如何输入 数据。使用上面找到的列名。
  4. 一旦创建了具有正确数量的表 列大小,您可以创建格式文件。

在我的回答中,我假设您对做所有这些事情感到满意,只是在高层次上分享了逻辑流程。如果您需要更多详细信息,我可以添加更多内容。

【讨论】:

  • 我会添加...如果文件包含标题,那将是一个很大的帮助。如果是这样,那么您只需使用从表中文件加载的第一行,您已将整行加载到单个列中...使用该行获取列名...至少,希望如此。
  • 它确实包含列标题
  • 我正在构建一种方法,以便用户可以将我系统中的列“映射”到通过 csv 提供的列。一些具有数值的列将有超过 1 个关联的 csv 列,这些值需要相加。这有点难以解释,但本质上我需要将数据转储到临时表或可删除表中。
  • 已更新。你怎么想?
  • 太棒了。我还建议更改标题。也许“动态加载具有未知、不同布局的 csv 文件”?祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
相关资源
最近更新 更多