本帖最后由 mingrui99 于 2011-07-10 07:12:47 编辑

解决方案 »

  1.   

    顶一下,再注明,生成的XML文件中不需要<log_x005F_xml><xml>和</xml></log_x005F_xml>,需要在头加上'<?xml version="1.0" encoding="UTF-8"?>'
      

  2.   

    /*--存为XML
     将表/查询存储为标准的XML文件
    --邹建 2003.12(引用请保留此信息)--*//*--调用示例
     --用SQL用winows身份验证的情况
     exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml' --用指定的用户
     exec p_savexml @sql='地区资料',@fname='c:\地区资料.xml',@userid='sa'
    --*/
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_savexml]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[p_savexml]
    GOcreate proc p_savexml
    @sql varchar(8000),     --要保存的表/视图/SQL查询语句
    @fname varchar(1000)='c:\tmp.xml', --保存的XML文件名
    @userid varchar(50)='',    --用户名,如果为nt验证方式,则为''
    @password varchar(50)=''   --密码
    as
    declare @err int,@src varchar(255),@desc varchar(255)
    declare @obj int,@constr varchar(1000)
    if isnull(@userid,'')=''
     set @constr='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='
      +db_name()+';Data Source='+@@servername
    else
     set @constr='Provider=SQLOLEDB.1;Persist Security Info=True;'
      +'User ID='+@userid+';Password='+isnull(@password,'')
      +';Initial Catalog='+db_name()+';Data Source='+@@servernameexec @err=sp_oacreate 'adodb.recordset',@obj out
    if @err<>0 goto lberrexec @err=sp_oamethod @obj,'open',null,@sql,@constr
    if @err<>0 goto lberrset @sql='del '+@fname
    exec master..xp_cmdshell @sql,no_output
    exec @err=sp_oamethod @obj,'save',null,@fname,1
    if @err<>0 goto lberrexec @err=sp_oadestroy @obj
    returnlberr:
     exec sp_oageterrorinfo 0,@src out,@desc out
     select cast(@err as varbinary(4)) as 错误号
      ,@src as 错误源,@desc as 错误描述
    go
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zjcxc/archive/2003/12/31/20086.aspx
      

  3.   

    代码如下供参考,最近刚好在做XML的程序.--建测试表
    create table xtab (xx varchar(max))--加文件头
    insert into xtab values('<?xml version="1.0" encoding="UTF-8"?>')
    insert into xtab values('<xmlcode>')--加文件内容(XML)
    declare @x xml
    set @x=(select name,xtype from sysobjects for xml auto)
    insert into xtab select cast(@x as varchar(max))--加文件尾
    insert into xtab values('</xmlcode>')select * from xtab--导出为XML文件
    exec master..xp_cmdshell 'bcp mydb.dbo.xtab out c:/0710.xml -c -T -k'-- 结果 c:/0710.xml
    --<?xml version="1.0" encoding="UTF-8"?>
    --<xmlcode>
    --....
    --</xmlcode>
      

  4.   


    这个好像不行的,用的是VARCHAR(MAX),保存出来的XML文件无法用IE打开,提示文件的顶层无效
      

  5.   

    我用您的程序试了一下,生成的类似于如下的XML文件,还不是我要的结果继续等
    - <xml xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    - <s:Schema id="RowsetSchema">
    - <s:ElementType name="row" content="eltOnly" rs:CommandTimeout="30">
    - <s:AttributeType name="bar_code" rs:number="1" rs:writeunknown="true">
      <s:datatype dt:type="string" rs:dbtype="str" dt:maxLength="100" rs:maybenull="false" /> 
      </s:AttributeType>
      <s:extends type="rs:rowbase" /> 
      </s:ElementType>
      </s:Schema>
    - <rs:data>
      <z:row bar_code="10101010101010101010" /> 
      <z:row bar_code="11011011011011011011" /> 
      <z:row bar_code="11111111111111111111" /> 
      <z:row bar_code="12012012012012012012" /> 
      <z:row bar_code="13013013013013013013" /> 
      <z:row bar_code="14014014014014014014" /> 
      <z:row bar_code="22222222222222222222" /> 
      <z:row bar_code="33333333333333333333" /> 
      <z:row bar_code="44444444444444444444" /> 
      <z:row bar_code="55555555555555555555" /> 
      <z:row bar_code="66666666666666666666" /> 
      <z:row bar_code="77777777777777777777" /> 
      <z:row bar_code="88888888888888888888" /> 
      <z:row bar_code="99999999999999999999" /> 
      </rs:data>
      </xml>
      

  6.   

    我只是给个例子,说明可以很自由的定义XML格式.
    具体的XML要什么格式要参照来修改的呀.
      

  7.   


    还是很疑惑我希望得到的是下面的结果
    <?xml version="1.0" encoding="UTF-8" ?> 
    - <Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="3.0">
    - <Events>
    - <Event name="SalesWareHouseOut" MainAction="WareHouseOut">
    - <DataField>
      <Data Code="81113380000020861666" Actor="0001" Actdate="2011-04-21 16:51:00" WrongCode="False" TOCorpID="000002929220" OwnerID="" CorpOrderID="Out_20110421165100" /> 
      </DataField>
      </Event>
      </Events>
      </Document>
      

  8.   

    套用一下..--建测试表
    create table xtab (xx varchar(max))--加文件头
    insert into xtab values('<?xml version="1.0" encoding="UTF-8" ?>')
    insert into xtab values('<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="3.0">')
    insert into xtab values('<Events><Event name="SalesWareHouseOut" MainAction="WareHouseOut"><DataField>')--加文件内容(<Data Code>XML)
    insert into xtab select '<Data Code="81113380000020861666" Actor="0001" Actdate="2011-04-21 16:51:00" WrongCode="False" TOCorpID="000002929220" OwnerID="" CorpOrderID="Out_20110421165100" /> '--加文件尾
    insert into xtab values('</DataField></Event></Events></Document>')--导出为XML文件
    exec master..xp_cmdshell 'bcp mydb.dbo.xtab out c:/0710.xml -c -T -k'
      

  9.   

    _x005F为什么会出现这个乱码呢,发现_x就会在前面出现这个乱码。
      

  10.   

    问题解决:用path 就可以了。