向文件里写入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
...全文
172 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
挨踢啊挨踢 2009-09-24
  • 打赏
  • 举报
回复
我用xp_cmdshell实现了。
--小F-- 2009-09-21
  • 打赏
  • 举报
回复
等高手来解决
soft_wsx 2009-09-21
  • 打赏
  • 举报
回复
XML还没有用!顶
billpu 2009-09-21
  • 打赏
  • 举报
回复
生成的文件是unicode格式 utf-16 从新编码 打开看看

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧