Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Sql Server_Bcp - Fatal编程技术网

SQL Server BCP插入其他列

SQL Server BCP插入其他列,sql,sql-server,bcp,Sql,Sql Server,Bcp,我的重新就业: 输入文件: 1,abc,xyx 2,def,mno 3、ghi、suv 数据库表结构: Col1字符 col2半焦 col3半焦 四氯化碳 col5半焦 BCP后的表中数据: 第1列第2列第3列第4列第5列 1 abc xyz ab xy 2 def mno de mn 3 ghi suv gh su col4和col5基本上是根据col2和col3值计算得出的值 SQL Server BCP实用程序是否支持此类操作?任何指点都将不胜感激 干杯 GT不,虽然可以使用BCP从查询中

我的重新就业:

输入文件:

1,abc,xyx

2,def,mno

3、ghi、suv

数据库表结构:

Col1字符

col2半焦

col3半焦

四氯化碳

col5半焦

BCP后的表中数据:

第1列第2列第3列第4列第5列

1 abc xyz ab xy

2 def mno de mn

3 ghi suv gh su

col4和col5基本上是根据col2和col3值计算得出的值

SQL Server BCP实用程序是否支持此类操作?任何指点都将不胜感激

干杯
GT

不,虽然可以使用BCP从查询中提取数据集并转储到文件,但不能使用BCP执行此操作

如果您想在不使用源代码查询的情况下执行此操作,则必须将bcp输出到一个文件,使用perl脚本或类似的脚本对该文件进行后处理,以生成计算列,然后使用适当格式的bcp控制文件将该文件重新导入到目标


编辑:BCP相当简单。如果不能使用客户端工具,则可以将其插入到暂存表中,然后在存储过程中计算派生值。

否,BCP不能这样做,尽管可以使用BCP从查询中提取数据集并转储到文件

如果您想在不使用源代码查询的情况下执行此操作,则必须将bcp输出到一个文件,使用perl脚本或类似的脚本对该文件进行后处理,以生成计算列,然后使用适当格式的bcp控制文件将该文件重新导入到目标


编辑:BCP相当简单。如果无法使用客户端工具,则可以插入到暂存表中,然后计算存储过程中的派生值。

您可以将BCP插入到暂存表中,然后以适当的结构从暂存表插入到另一个表中

您还可以在SQL中使用与外部BCP命令相同格式的文件和源文件进行批量插入,以便可以在SQL中运行整个批处理:批量插入到表匹配输入,然后插入到最终表中

另一个预处理选项(如Perl或任何其他命令行工具)是PowerShell,在将BCP潜在地与XML选项一起使用之前,先对数据进行管道传输:


我的首选选项可能是SSIS,它提供了整个转换库,包括派生列。

您可以将BCP映射到一个临时表中,然后以适当的结构从临时表插入到另一个表中

您还可以在SQL中使用与外部BCP命令相同格式的文件和源文件进行批量插入,以便可以在SQL中运行整个批处理:批量插入到表匹配输入,然后插入到最终表中

另一个预处理选项(如Perl或任何其他命令行工具)是PowerShell,在将BCP潜在地与XML选项一起使用之前,先对数据进行管道传输:


我的首选方案可能是SSIS,它提供了包括派生列在内的整个转换库。

SQL Server集成服务和转换将是我的首选方法。构建所需的转换是一个非常简单的包,而且SSI非常快,易于安排等等。

SQL Server集成服务和转换将是我的选择。构建所需的转换是一个非常简单的包——SSI非常快,易于安排等等。

您可以使用格式文件指定哪个数据字段映射到哪个列

使用bcp导入时,可以使用格式文件:

为表格创建格式文件:

 bcp [table_name] format nul -f [format_file_name.fmt] -c -T 
这将创建如下文件:

 9.0
5
1       SQLCHAR       0       100     ","      1     Col1             SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR       0       100     ","      2     Col2             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","      3     Col3           SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       100     ","      3     Col4           SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR       0       100     ","      3     Col5           SQL_Latin1_General_CP1_CI_AS
编辑导入文件。诀窍是删除本例中不需要字段4和5的列,并更新列计数:这是格式文件中的第二行。在本例中,将5更改为3。 然后使用此格式文件导入数据,指定输入文件、此格式文件和分隔符:

bcp [table_name] in [data_file_name] -t , -f [format_file_name.fmt] -T 

可以使用格式文件指定哪个数据字段映射到哪个列

使用bcp导入时,可以使用格式文件:

为表格创建格式文件:

 bcp [table_name] format nul -f [format_file_name.fmt] -c -T 
这将创建如下文件:

 9.0
5
1       SQLCHAR       0       100     ","      1     Col1             SQL_Latin1_General_CP1_CI_AS
2       SQLCHAR       0       100     ","      2     Col2             SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       100     ","      3     Col3           SQL_Latin1_General_CP1_CI_AS
4       SQLCHAR       0       100     ","      3     Col4           SQL_Latin1_General_CP1_CI_AS
5       SQLCHAR       0       100     ","      3     Col5           SQL_Latin1_General_CP1_CI_AS
编辑导入文件。诀窍是删除本例中不需要字段4和5的列,并更新列计数:这是格式文件中的第二行。在本例中,将5更改为3。 然后使用此格式文件导入数据,指定输入文件、此格式文件和分隔符:

bcp [table_name] in [data_file_name] -t , -f [format_file_name.fmt] -T 

如果您不怕编写一点程序,可以使用ADO.NET进行编程。通过实现一个定制的IDataReader,您可以很容易地完成这个转换,以及您希望在运行中进行的任何其他转换。SqlBulkCopy接受IDataReader并批量插入它提供的数据。然后,读取器可以使用输入文件并提供
附加列、转换数据、查找键值等

如果您不怕编写一点程序,可以使用ADO.NET进行编程。通过实现一个定制的IDataReader,您可以很容易地完成这个转换,以及您希望在运行中进行的任何其他转换。SqlBulkCopy接受IDataReader并批量插入它提供的数据。然后,读者可以使用输入文件并提供附加列、转换数据、查找键值等

它有没有像普通的SQLINSERT命令那样的东西,我们可以在其中插入计算值?由于一些限制,我不能使用PERL/others来实现这一点。如果您不能使用客户端工具,您可以将其插入到暂存表中,然后在存储过程中计算派生值。它是否有类似于普通SQL insert命令的功能,可以在其中插入计算值?由于一些限制,我不能使用PERL/others来实现这一点。如果您不能使用客户端工具,您可以将其插入到暂存表中,然后在存储过程中计算派生值。这是一个很棒的技巧,谢谢!我要补充的是,如果要删除不在表末尾的行,则需要重新编号“主机文件字段顺序”,即此格式文件中的第一列数字。我发现这些“非xml格式文件”的结构信息非常丰富:这是一个很好的技巧,谢谢!我要补充的是,如果要删除不在表末尾的行,则需要重新编号“主机文件字段顺序”,即此格式文件中的第一列数字。我发现这些“非xml格式文件”的结构信息非常有用:如果col4和col5是表中现有列的计算值,为什么不使用计算列创建目标表呢。如果需要为它们编制索引,则将它们设置为持久化。您可以按照下面的@edosoft answer使用BCP,从源导出数据,然后导入。如果col4和col5是表中现有列的计算值,为什么不使用计算列创建目标表呢。如果需要为它们编制索引,则将它们设置为持久化。您可以按照下面的@edosoft answer使用BCP,从源导出数据,然后导入。那么您根本不需要担心填充col4和col5