下面是邹建写的向文件写记录集的存储过程。我现在想用sql语句传入写文件,而且是带for xml的sql语句,即:
select * from table for xml auto,elements.就出现乱码了。问题在于for xml的返回还是recordset吗?怎么改造一下才可以生成正确的文件呢?谢谢。CREATE 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;Integrated Security=SSPI;Persist   Security Info=False;Initial Catalog='   
      +db_name()+';Data Source='+@@servername   
  else   
    set   @constr='Provider=SQLOLEDB;Persist Security Info=True;'   
      +'User ID='+@userid+';Password='+isnull(@password,'')   
      +';Initial Catalog='+db_name()+';Data Source='+@@servername   
    
  exec   @err=sp_oacreate   'adodb.recordset',@obj   out   
  if   @err<>0   goto   lberr   
    
  exec   @err=sp_oamethod   @obj,'open',null,@sql,@constr   
  if   @err<>0   goto   lberr   
    
  set   @sql='del   '+@fname   
  exec   master..xp_cmdshell   @sql,no_output   
  exec   @err=sp_oamethod   @obj,'save',null,@fname,1   
  if   @err<>0   goto   lberr   
    
  exec   @err=sp_oadestroy   @obj   
  return   
    
  lberr:   
    exec   sp_oageterrorinfo   0,@src   out,@desc   out   
    select   cast(@err   as   varbinary(4))   as   错误号   
      ,@src   as   错误源,@desc   as   错误描述
GO