如何创建.fmt文件,并将数据从混合输入文件导出到多个表中

时间:2011-05-13 17:21:13

标签: sql-server-2008 import bcp

尝试使用bcp实用程序设置.fmt文件。我之前已经成功地创建了这个(使用数据导出为输入的表):

bcp cmsDatabase.dbo.Table1格式nul -T -c -f Table1Format.fmt

9.0
3
1       SQLCHAR       0       12      "\t"     1     Col1_Table1      ""
2       SQLCHAR       0       100     "\t"     2     Col2_Table1      SQL_Latin1_General_CP1_CI_AS
3       SQLCHAR       0       0       "\t"     3     Col3_Table1      SQL_Latin1_General_CP1_CI_AS

创建它的表1: Col1_Table1 int(主键) Col2_Table1 nvarchar(50) Col3_Table1 nvar

现在我遇到了一个问题。我有输入.txt / .csv文件(分隔的平面文件),数据不会直接导入到一个表中,它必须进入很多表(AND,一个直接进入行,其他数据需要输入到table2)的列,示例输入文件的数据:

"Col1_Table1x" "Col2_Table1x" "Col3_Table1x" "Col1_Table2x, Col1_Table2y, Col1_Table2z"

更新: 在上面的文件中,值必须进入:

Col1_Tablex -> Col1_Table1 column of Table1
Col2_Tablex -> Col2_Table1 column of Table1
Col3_Table1x ->  Col3_Table1 column of Table1

表1:

Col1_Table1   Col2_Table1   Col3_Table1
-------------------------------------------
Col1_Table1x   Col2_Table1x   Col3_Table1x

直到这里,我可以让它发挥作用。

我想弄清楚的是:

“Col1_Table2,Col1_Table2,Col1_Table2,.....” - >要在Table2中放置多个记录,用逗号分隔的值填充Col_Table2,以及 将Col1_Table1作为外键。

表2应该有

    Col1_Table1      Col1_Table2
----------------------------------------------
    Col1_Table1x    Col1_Table2x
    Col1_Table1x    Col1_Table2y
    Col1_Table1x    Col1_Table2z

其中Col1_Table2需要作为行进入Table2(并且是逗号分隔),而Col1_Table1是Table2的外键,因此它也需要复制。

有没有办法创建一个允许复制这种混合输入的.fmt文件?

其他详细信息:每次我需要从此输入文件加载表时,我都可以截断所有旧数据并重新填充。任何列都可以包含特殊字符,例如&lt;,“,&amp;等等。那么有没有办法处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

如果数据量很小/中等,那么您可以简单地将数据导入临时表并在不同步骤中导入到两个表中。

此外,您可以使用两个不同的格式文件跳过数据文件中的几列,并使用它们插入到跳过其他表中的列的不同表中。

http://msdn.microsoft.com/en-us/library/ms187908.aspx

使用特殊字符,解决此问题的唯一好方法是使用多列分隔符。我在音乐行业,所以有时我使用3个不同的列分隔符来正确导入数据。