向文件里写入for xml的sql语句返回后的结果???
挨踢啊挨踢 2009-09-21 10:57:34 下面是邹建写的向文件写记录集的存储过程。
我现在想用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