千万级别 的 txt 数据导入 sqlserver2005 方法,可以容错,数据类型自动转化。解决sql2005数据导入难题

千万级别 的 txt 数据导入 sqlserver2005 方法,可以容错,数据类型自动转化。解决sql2005数据导入难题

我有一个 ExVnoVerifyTb.txt 文件 有60列 大小1.6G,目前我只用到 其中的 12列
如何导入
比如导入P_JWBGB库,库中无表 ExVnoVerifyfirst

1. 先把数据用ultraedit32 打开 ,复制最前面 的 3 行 保存为 ExVnoVerifyfirst.txt
2.使用 sql2005 导入导出向导,直接将 ExVnoVerifyfirst导成表 ExVnoVerifyfirst (60列)主要用于确认表的总列数。
3.在 sql2005新建 ExVnoVerifyTb (最终生成的目标表,只取60列中的12列)

USE [P_JWBGB]
GO
/****** 对象:  Table [dbo].[ExVnoVerifyTb]    脚本日期: 03/05/2011 20:21:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ExVnoVerifyTb](
 [Hxdh] [nvarchar](9) NULL,
 [Whj] [nvarchar](6) NULL,
 [Qiyedaima] [nvarchar](9) NULL,
 [Fadandate] [int] NULL,
 [Chukoudate] [int] NULL,
 [Maoyifangshi] [nvarchar](4) NULL,
 [Hxyf] [nvarchar](4) NULL,
 [Cjzongjia] [money] NULL,
 [Yinghxje] [money] NULL,
 [Whxje] [money] NULL,
 [Yihxje] [money] NULL,
 [Hexiaodate] [int] NULL
) ON [PRIMARY]

通过分析,明白ExVnoVerifyTb表中各列分别 对应ExVnoVerifyfirst表60列中的
1,2,3,5,11,13,27,45,46,47,52,58列

4. 点 开始菜单 运行 bcp P_JWBGB..ExVnoVerifyTb  format nul -c -x -f D:\soft\ExVnoVerifyTb.xml  -T

生成 ExVnoVerifyTb.xml,用于 把导入的文本保存为该格式

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="18" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="18" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="4" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="8" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="9" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="10" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="11" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
  <FIELD ID="12" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="40" COLLATION="Chinese_PRC_CI_AS"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Hxdh" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="2" NAME="Whj" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Qiyedaima" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="4" NAME="Fadandate" xsi:type="SQLINT"/>
  <COLUMN SOURCE="5" NAME="Chukoudate" xsi:type="SQLINT"/>
  <COLUMN SOURCE="6" NAME="Maoyifangshi" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="7" NAME="Cjzongjia" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="8" NAME="Yinghxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="9" NAME="Whxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="10" NAME="Yihxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="11" NAME="Hexiaodate" xsi:type="SQLINT"/>
  <COLUMN SOURCE="12" NAME="Baoguandanhao" xsi:type="SQLNVARCHAR"/>
 </ROW>
</BCPFORMAT>

5.修改 ExVnoVerifyTb.xml 文件,改成的 对应ExVnoVerifyfirst表60列中的
1,2,3,5,11,13,27,45,46,47,52,58列 ,<RECORD>中剩下的补成 如:  <FIELD ID="48" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>

例如:

<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="18" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="18" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
  <FIELD ID="6" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="7" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="8" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="9" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="10" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="11" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/>
  <FIELD ID="12" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="13" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="4" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="14" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="15" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="16" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="17" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="18" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="19" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="20" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="21" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="22" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="23" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="24" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="25" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="26" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="27" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="4" COLLATION="Chinese_PRC_CI_AS"/>
  <FIELD ID="28" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="29" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="30" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="31" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="32" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="33" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="34" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="35" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="36" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="37" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="38" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="39" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="40" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="41" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="42" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="43" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="44" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="45" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="46" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="47" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="48" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="49" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="50" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="51" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="52" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="30"/>
  <FIELD ID="53" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="54" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="55" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="56" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="57" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="58" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="12"/> 
  <FIELD ID="59" xsi:type="CharTerm" TERMINATOR="\t" MAX_LENGTH="255"/>
  <FIELD ID="60" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="255"/> 
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="Hxdh" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="2" NAME="Whj" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="3" NAME="Qiyedaima" xsi:type="SQLNVARCHAR"/>
  <COLUMN SOURCE="5" NAME="Fadandate" xsi:type="SQLINT"/>
  <COLUMN SOURCE="11" NAME="Chukoudate" xsi:type="SQLINT"/>
  <COLUMN SOURCE="13" NAME="Maoyifangshi" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="27" NAME="Hxyf" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="45" NAME="Cjzongjia" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="46" NAME="Yinghxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="47" NAME="Whxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="52" NAME="Yihxje" xsi:type="SQLMONEY"/>
  <COLUMN SOURCE="58" NAME="Hexiaodate" xsi:type="SQLINT"/>
 </ROW>
</BCPFORMAT>
6.在 sql2005 查询中运行

bulk insert P_JWBGB.dbo.ExVnoVerifyTb from 'D:\soft\ExVnoVerifyTbjieduan.txt'

with(

FIELDTERMINATOR='\t',
ROWTERMINATOR='\n',
FORMATFILE = 'D:\soft\ExVnoVerifyTb.xml',
MAXERRORS = 10000
)

7. FIELDTERMINATOR 表示 字段分隔符,MAXERRORS表示允许容错的 行数,导入速度很快,不进行数据校验检查。解决sql2005数据导入难题

posted @ 2011-03-05 20:36  山泉  阅读(1768)  评论(3编辑  收藏  举报