需要一个中间转换的工具,如C#的dataset,好像不能直接导进去。

解决方案 »

  1.   

    如果你的数据已经知道,可以直接用下面的方法
    DECLARE @idoc int,@doc varchar(8000)SET @doc ='
    <?xml version="1.0" encoding="GB2312"?>
    <电子病历>
       <病案 num="1">
          <姓名>梁景</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="2">
          <姓名>张路</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="3">
          <姓名>何江</姓名>
          <性别>男</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
    </电子病历>
    'EXEC sp_xml_preparedocument @idoc OUTPUT, @docinsert into 你要接收数据导入的表         --如果你仅想显示,就去掉此句
    SELECT * FROM OPENXML (@idoc, '/电子病历/病案',2)
    WITH (姓名 varchar(20)
    ,性别 varchar(2)
    ,出生日期 datetime
    ,婚姻 varchar(10)
    ,职业 varchar(50)
    )
      

  2.   

    如果你的xml是一个文件,可以用下面的方法,假设你的xml文件是:c:\a.xmlDECLARE @idoc int,@doc varchar(8000)--从文件中读出XML内容到临时表
    create table #tb (doc varchar(8000))
    bulk insert #tb from 'c:\a.xml'--将读取到的数据保存到变量中
    set @doc=''
    select @doc=@doc+doc from #tb--删除临时表
    drop table #tb/*
    SET @doc ='
    <?xml version="1.0" encoding="GB2312"?>
    <电子病历>
       <病案 num="1">
          <姓名>梁景</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="2">
          <姓名>张路</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="3">
          <姓名>何江</姓名>
          <性别>男</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
    </电子病历>
    '
    --*/EXEC sp_xml_preparedocument @idoc OUTPUT, @docSELECT * FROM OPENXML (@idoc, '/电子病历/病案',2)
    WITH (姓名 varchar(20)
    ,性别 varchar(2)
    ,出生日期 datetime
    ,婚姻 varchar(10)
    ,职业 varchar(50)
    )
      

  3.   

    如果你的xml是一个文件,可以用下面的方法,假设你的xml文件是:c:\a.xmlDECLARE @idoc int,@doc varchar(8000)--从文件中读出XML内容到临时表
    create table #tb (doc varchar(8000))
    bulk insert #tb from 'c:\a.xml'--将读取到的数据保存到变量中
    set @doc=''
    select @doc=@doc+doc from #tb--删除临时表
    drop table #tb/*
    SET @doc ='
    <?xml version="1.0" encoding="GB2312"?>
    <电子病历>
       <病案 num="1">
          <姓名>梁景</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="2">
          <姓名>张路</姓名>
          <性别>女</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
        <病案 num="3">
          <姓名>何江</姓名>
          <性别>男</性别>
          <出生日期>1985-7-12</出生日期>
          <婚姻>已婚</婚姻>
          <职业>工人</职业>
        </病案>
    </电子病历>
    '
    --*/EXEC sp_xml_preparedocument @idoc OUTPUT, @docSELECT * FROM OPENXML (@idoc, '/电子病历/病案',2)
    WITH (姓名 varchar(20)
    ,性别 varchar(2)
    ,出生日期 datetime
    ,婚姻 varchar(10)
    ,职业 varchar(50)
    )
      

  4.   

    谢谢zjcxc(邹建) 。我已经弄出来了。但和你的不一样。
    我先研究一下你的代码。谢谢。
    分嘛等我研究一下会通知你去拿分的!谢谢
      

  5.   

    sp_xml_preparedocument 存储过程好想不能处理中文的XML文档
      

  6.   

    westseason(西城时代)你是用什么方发处理的呢?贴出来大家一起看看