你的意思是把xml文件显示在dbgrid里还是把xml文件导入到数据库里?

解决方案 »

  1.   

    --示例DECLARE @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/*--xml文档内容
    SET @doc ='
    <?xml version=''1.0'' encoding="gb2312"?>
    <LanguageSource>
    <Book>
       <type>报告文学</type>
       <author>不详</author>
       <title>不详</title>
          <context>
             <chapter>
                 <title>不详1</title>
                 <doc>不详1</doc>
             </chapter>
             <chapter>
                 <title>不详2</title>
                 <doc>不详2</doc>
             </chapter>
          </context>
    </Book>
    </LanguageSource>'
    --*/
    EXEC sp_xml_preparedocument @idoc OUTPUT, @doc--创建测试的表
    create table 作者表(作者ID int identity(1,1),作者名字 varchar(50),作者介绍 varchar(50))
    create table 类型表(类型ID int identity(1,1),类型名 varchar(50))
    create table 书名列表(书名ID int identity(1,1),作者ID int,类型ID int,书名 varchar(50))--下面是数据处理
    declare @作者ID int,@类型ID int--作者表:作者ID、作者名字、作者介绍
    insert 作者表(作者名字)
    SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
    WITH (
    作者名字 varchar(50) 'author'
    )
    set @作者id=@@identity--类型表:类型ID、类型名
    insert into 类型表(类型名)
    SELECT * FROM OPENXML (@idoc, '/LanguageSource/Book',2)
    WITH (
    类型名 varchar(50) 'type'
    )
    set @类型ID=@@identity--书名列表:书名ID、作者ID、类型ID、书名(也就是XML中的第一个TITLE)
    insert into 书名列表(作者ID,类型ID,书名)
    SELECT @作者ID,@类型ID,* FROM OPENXML (@idoc, '/LanguageSource/Book',2)
    WITH (
    书名 varchar(50) 'title'
    )EXEC sp_xml_removedocument @idocgo--显示处理结果
    select * from 作者表
    select * from 类型表
    select * from 书名列表--删除测试表
    drop table 作者表,类型表,书名列表
      

  2.   

    bulk insert #tb from 'c:\a.xml'?怎么解释?