使用 BCP/BULK IMPORT(SQL 服务器)导入不存在的行
Importing non-existing rows using BCP/BULK IMPORT (SQL Server)
我正在尝试将文件加载到 SQL 服务器数据库中。我熟悉使用批量导入和使用 BCP 生成格式文件来重组列。但是,我正在尝试做 2 件我以前从未尝试过的新事情。
我收到了数十个单独的 CSV 文件以加载到数据库中,每个文件代表几年中的一天。我希望能够使用一个实用程序来加载它们,但它们有不同数量的列(当然,是单独的文件!)。我正在考虑创建一个加载存储过程,并使用 PowerShell 遍历文件,但即使那样我也想不出一个好的方法来处理不同数量的列。
列是一致的,只是这些年来文件中添加了列。我希望能够导入列数较少的文件,让不存在的列作为空值出现。 BCP 支持吗?
我宁愿不必弄清楚每列的添加时间并为每组日期写入不同的存储 procedures/scripts(这是我能想到的唯一解决方案!)。有什么建议吗?
谢谢!
我能想到的处理这个问题的唯一方法是使用过程编码。您可以编写控制台应用程序或带有脚本任务的 SSIS 包。无论哪种方式,您都需要遍历文件,并在循环内检查内容以查看缺少哪些列,然后导入文件,为缺少的任何列提供一些硬编码值。
BCP 可以使用格式文件处理缺少列的文件,但不能动态处理(事先不知道缺少哪些列)。
对于关注的人-
我通过使用 Powershell 将所有文本文件连接成一个大文本文件解决了这个谜题(因为无论如何我们只是将它们全部加载到一个数据库中 table)。上传单个文件后,我在 SSIS 中创建了一个平面文件到 OLE-DB 的连接程序,并使用它的数据转换和派生列任务将值转换为指定字段的所需值。 SSIS 是一种非常快速的方法,可以在打包后上传数据,在几秒钟内通过数百万行。如果您选择走那条路,请注意以下几点:
如果您要上传大量文本文件并选择将它们串联起来,请注意文件可能会变得太大而无法直接读取。 SSIS 有 'data viewer' 工具可用于故障排除,这些工具将允许您查看文件内容,而不管文件的大小(因为您将一次阅读 1,000 行)。但是,显然,这会严重降低您的速度,因此最好先测试您的脚本,然后再处理 SSIS 包。
祝你好运!
我正在尝试将文件加载到 SQL 服务器数据库中。我熟悉使用批量导入和使用 BCP 生成格式文件来重组列。但是,我正在尝试做 2 件我以前从未尝试过的新事情。
我收到了数十个单独的 CSV 文件以加载到数据库中,每个文件代表几年中的一天。我希望能够使用一个实用程序来加载它们,但它们有不同数量的列(当然,是单独的文件!)。我正在考虑创建一个加载存储过程,并使用 PowerShell 遍历文件,但即使那样我也想不出一个好的方法来处理不同数量的列。
列是一致的,只是这些年来文件中添加了列。我希望能够导入列数较少的文件,让不存在的列作为空值出现。 BCP 支持吗?
我宁愿不必弄清楚每列的添加时间并为每组日期写入不同的存储 procedures/scripts(这是我能想到的唯一解决方案!)。有什么建议吗?
谢谢!
我能想到的处理这个问题的唯一方法是使用过程编码。您可以编写控制台应用程序或带有脚本任务的 SSIS 包。无论哪种方式,您都需要遍历文件,并在循环内检查内容以查看缺少哪些列,然后导入文件,为缺少的任何列提供一些硬编码值。
BCP 可以使用格式文件处理缺少列的文件,但不能动态处理(事先不知道缺少哪些列)。
对于关注的人-
我通过使用 Powershell 将所有文本文件连接成一个大文本文件解决了这个谜题(因为无论如何我们只是将它们全部加载到一个数据库中 table)。上传单个文件后,我在 SSIS 中创建了一个平面文件到 OLE-DB 的连接程序,并使用它的数据转换和派生列任务将值转换为指定字段的所需值。 SSIS 是一种非常快速的方法,可以在打包后上传数据,在几秒钟内通过数百万行。如果您选择走那条路,请注意以下几点:
如果您要上传大量文本文件并选择将它们串联起来,请注意文件可能会变得太大而无法直接读取。 SSIS 有 'data viewer' 工具可用于故障排除,这些工具将允许您查看文件内容,而不管文件的大小(因为您将一次阅读 1,000 行)。但是,显然,这会严重降低您的速度,因此最好先测试您的脚本,然后再处理 SSIS 包。
祝你好运!