积极答复者
bulk insert中文乱码

问题
-
遇到一个非常棘手的问题,查阅了大量资料也没能解决,还请各位老师给予解答,不胜感激:
问题是关于在sql2008 中运行bulk insert时出现的。
-------------------------------------------------------------------------------------------------------------------------------------------------
1、首先先创建一张表aa:
CREATE TABLE [dbo].[aa](
[bill_hyh_ydh_shrq] [nvarchar](50) NULL,
[bill_order] [nvarchar](50) NULL,
[userinfo_id] [nvarchar](50) NULL,
[bill_user_name] [nvarchar](50) NULL,
[bill_goods_name] [nvarchar](50) NULL
) ON [PRIMARY]-------------------------------------------------------------------------------------------------------------------------------------------------
2、创建一个编码类型是Unicode的txt文档text.txt(由于txt文档是程序自动生成的只能是Unicode或UTF—8):
24181#24181#23#gf#18661859985
24181#四方#24181#四方#24181
济南#济南#济南#济南#济南-------------------------------------------------------------------------------------------------------------------------------------------------
3、创建一个数据格式化文件itext.xml:
<?xml version="1.0" ?>
<BCPFORMAT ..........> <RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR="#" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="#" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="#" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="#" COLLATION="Chinese_PRC_CI_AS"/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\n" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="bill_hyh_ydh_shrq" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="2" NAME="bill_order" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="3" NAME="userinfo_id" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="4" NAME="bill_user_name" xsi:type="SQLNVARCHAR" />
<COLUMN SOURCE="5" NAME="bill_goods_name" xsi:type="SQLNVARCHAR" />
</ROW>
</BCPFORMAT>-------------------------------------------------------------------------------------------------------------------------------------------------
4、在sql2008中运行语句(sql2005我测试可以得到正确结果,但需要设置代码页为65001。sql2008不支持代码页65001,我们系统数据库是sql2008的所以只能用sql2008):
SELECT * FROM openrowset(
bulk N'E:/text.txt',
FORMATFILE = 'E:/itext.xml'
) AS mytb-------------------------------------------------------------------------------------------------------------------------------------------------
5、得到以下结果
锘?4181 24181 23 gf 18661859985
24181 鍥涙柟 24181 鍥涙柟 24181
娴庡崡 娴庡崡 娴庡崡 娴庡崡 娴庡崡-------------------------------------------------------------------------------------------------------------------------------------------------
由于程序生成的大量txt里面列不一定和数据表里面的列顺序一致,所以需要用xml格式化文件指定txt里面的数据列对照。这个问题困扰了
我们好长时间了,咨询了不少人不知道如何解决这个问题还请老师帮忙解决。至于txt文档是程序自动生成的,每天有大量生成格式只能是
Unicode或UTF—8。
----在线等待解答:
- 已编辑 bulk insert中文乱码 2014年9月25日 15:45
答案
-
联机帮助上明确不支持这个代码页, 应该是要调整程序,改变文件编码,要么换用其他方法吧, 比如用 SSIS或者自己写程序
- 已标记为答案 Michelle GeModerator 2014年9月29日 8:36