利用xml格式文件把文件导入sql server表的问题

freedomxa007 2016-02-23 11:01:45
测试表:
create table p_stocks(idkey int identity(1,1),cpcode varchar(20)default(''),cpname varchar(20) default(''),cpmodel varchar(20) default (''),cunit varchar(10) default (''))

测试数据(txt文件):
编码,名称,车型,单位
test1,test1,比亚迪,个
test2,test2,奇瑞,片
test3,test3,天籁,双

sql语句:
BULK INSERT p_stocks FROM 'c:\test.txt'
WITH
(
formatfile='c:\test.xml',
--FIELDTERMINATOR=',',
--ROWTERMINATOR='\r\n'
FIRSTROW=2
)

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="," />
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," />
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," />
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" />
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="cpcode" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="cpname" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="cpmodel" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="cunit" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT>




问题:导入时候不会跳过idkey来对应字段导入(如下图1所示,正确的应该是图2),请教大神们xml文件怎么写才可以...

图1

图2







...全文
367 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-02-23
  • 打赏
  • 举报
回复
可这样用
INSERT INTO p_stocks
  SELECT *
      FROM  OPENROWSET(BULK  'd:\test.txt',
      FORMATFILE='d:\test.xml'  ,FIRSTROW=2
       ) AS t1;
如果直接用,只能把txt文件和格式xml文件都要调整
中国风 2016-02-23
  • 打赏
  • 举报
回复
INSERT INTO p_stocks
  SELECT *
      FROM  OPENROWSET(BULK  'c:\test.txt',
      FORMATFILE='c:\test.xml'  ,FIRSTROW=2
       ) AS t1;
路径指定c:
freedomxa007 2016-02-23
  • 打赏
  • 举报
回复
引用 4 楼 roy_88 的回复:
[quote=引用 3 楼 freedomxa007 的回复:] [quote=引用 2 楼 roy_88 的回复:]
INSERT INTO p_stocks
  SELECT *
      FROM  OPENROWSET(BULK  'c:\test.txt',
      FORMATFILE='c:\test.xml'  ,FIRSTROW=2
       ) AS t1;
路径指定c:
如果表的列多,数据源的列少,不止要跳过第一列要怎样导入?[/quote] INSERT INTO p_stocks(列2,列3..) SELECT 列1,列2.... FROM OPENROWSET(BULK 'c:\test.txt', FORMATFILE='c:\test.xml' ,FIRSTROW=2 ) AS t1; 指定列就行了[/quote] 谢谢版主
中国风 2016-02-23
  • 打赏
  • 举报
回复
引用 3 楼 freedomxa007 的回复:
[quote=引用 2 楼 roy_88 的回复:]
INSERT INTO p_stocks
  SELECT *
      FROM  OPENROWSET(BULK  'c:\test.txt',
      FORMATFILE='c:\test.xml'  ,FIRSTROW=2
       ) AS t1;
路径指定c:
如果表的列多,数据源的列少,不止要跳过第一列要怎样导入?[/quote] INSERT INTO p_stocks(列2,列3..) SELECT 列1,列2.... FROM OPENROWSET(BULK 'c:\test.txt', FORMATFILE='c:\test.xml' ,FIRSTROW=2 ) AS t1; 指定列就行了
freedomxa007 2016-02-23
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
INSERT INTO p_stocks
  SELECT *
      FROM  OPENROWSET(BULK  'c:\test.txt',
      FORMATFILE='c:\test.xml'  ,FIRSTROW=2
       ) AS t1;
路径指定c:
如果表的列多,数据源的列少,不止要跳过第一列要怎样导入?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧