Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用BCP/批量导入导入不存在的行(SQL Server)_Sql Server_Sql Server 2012_Bulk Import - Fatal编程技术网

Sql server 使用BCP/批量导入导入不存在的行(SQL Server)

Sql server 使用BCP/批量导入导入不存在的行(SQL Server),sql-server,sql-server-2012,bulk-import,Sql Server,Sql Server 2012,Bulk Import,我正在尝试将文件加载到SQL Server数据库中。我熟悉使用批量导入和使用BCP生成格式文件来重新组织列。然而,我正在尝试做两件我以前从未尝试过的新事情 我得到了许多单独的CSV加载到数据库中,每个文件代表几年中的一天。我希望能够使用一个实用工具来加载它们,但是它们有不同数量的列(当然,它们是独立的文件!)。我曾考虑创建一个加载存储过程,并使用PowerShell对文件进行迭代,但即使这样,我也无法找到一种处理不同列数的好方法 这些列是一致的,只是多年来文件中添加了一些列。我希望能够导入具有较

我正在尝试将文件加载到SQL Server数据库中。我熟悉使用批量导入和使用BCP生成格式文件来重新组织列。然而,我正在尝试做两件我以前从未尝试过的新事情

我得到了许多单独的CSV加载到数据库中,每个文件代表几年中的一天。我希望能够使用一个实用工具来加载它们,但是它们有不同数量的列(当然,它们是独立的文件!)。我曾考虑创建一个加载存储过程,并使用PowerShell对文件进行迭代,但即使这样,我也无法找到一种处理不同列数的好方法

这些列是一致的,只是多年来文件中添加了一些列。我希望能够导入具有较少列的文件,将不存在的列作为空值输入。BCP是否支持这一点

我不想知道每列是何时添加的,也不想为每组日期编写不同的存储过程/脚本(这是我唯一能想到的解决方案!)。有什么建议吗


谢谢

我能想到的处理这个问题的唯一方法是使用过程编码。您可以编写控制台应用程序,也可以编写带有脚本任务的SSIS包。无论哪种方式,您都需要在文件中循环,并在循环中检查内容以查看缺少哪些列,然后导入文件,为缺少的任何列提供一些硬编码值

BCP可以通过使用格式文件来处理缺少列的文件,但它不能动态地处理(不知道哪些列缺少)。

对于后续人员-

我通过使用Powershell将所有文本文件连接到一个大文本文件中(因为我们只是将它们全部加载到一个DB表中),解决了这个难题。一旦我有一个文件要上传,我就在SSIS中为OLE-DB连接程序创建了一个平面文件,并使用它的数据转换和派生列任务将值转换为指定字段的必需值。SSIS是一种非常快速的方法,可以在打包后上传数据,在几秒钟内通过数百万行。如果您选择走这条路线,请考虑以下几点:

如果要上载大量文本文件,并选择将它们连接起来,请知道该文件可能会变得太大而无法直接读取。SSIS具有“data viewer”工具,可用于故障排除,这些工具将允许您查看文件内容,而不管其大小(因为您一次将读取1000行)。然而,很明显,这将严重降低您的速度,因此最好先测试您的脚本,然后使用SSIS包


祝你好运

嗯。我想我可以通过使用powershell的导入CSV来添加空白列和BCPs格式文件,将这些空白列作为空值。谢谢你的建议!