从SQL存储过程格式化输出到xml文件

原创 2012年03月29日 11:20:57

项目需要直接在SQLServer数据库中使用SP进行数据查询并格式化输出到xml文件。

花了一点时间,研究了下bcp。
大致的步骤就是:
1.查询数据格式化,并将其插入临时表。
2.临时表输出到xml。

写下的SP脚本如下:

/*-------------------------------------------
过程名称:导出xml格式文件
---------------------------------------------*/
CREATE proc [dbo].[sp_output_xml]
as 
begin
declare @fname varchar(max)
declare @xml varchar(max)

--text字段和其他字段做字符串操作,必须转换为字符串类型
declare @id varchar(20)
declare @name varchar(40)
declare @weight varchar(10)
declare @lon varchar(10)
declare @lat varchar(10)
declare @manufacturedate_dt varchar(20)

declare @count int
declare @tabname varchar(100)
declare @objectid int

set @tabname = 'BusStop'
set @fname = 'd:\busdata.xml'

-- temp table
create TABLE temptab( res nvarchar(4000) )

set @count = 0
select @count=count(*) from BusStop
--print @count
set @objectid = 1

while @objectid<=@count
begin
select @id=ID,@name=Name,@weight=Weight,@lon=Lon,@lat=Lat,@manufacturedate_dt=Manufacturedate_dt 
from BusStop where nObjectid = @objectid
if @objectid = 1
begin
select @xml = '<add><doc>
<field name="id">'+@id+'</field> 
<field name="name">'+@name+'</field> 
   <field name="weight">'+@weight+'</field> 
<field name="busstop">'+@lat+','+@lon+'</field> 
<field name="manufacturedate_dt">'+@manufacturedate_dt+'</field>
</doc>

end
else if @objectid = @count
begin
select @xml = '<doc>
<field name="id">'+@id+'</field> 
<field name="name">'+@name+'</field> 
   <field name="weight">'+@weight+'</field> 
<field name="busstop">'+@lat+','+@lon+'</field> 
<field name="manufacturedate_dt">'+@manufacturedate_dt+'</field>
</doc></add>

end
else
begin
select @xml = '<doc>
<field name="id">'+@id+'</field> 
<field name="name">'+@name+'</field> 
<field name="weight">'+@weight+'</field> 
<field name="busstop">'+@lat+','+@lon+'</field> 
<field name="manufacturedate_dt">'+@manufacturedate_dt+'</field>
</doc>

end
--print @xml
insert into temptab (res) values (@xml)
set @objectid = @objectid + 1
end

-- 权限问题时,执行如下
--sp_configure 'show advanced options',1 
--RECONFIGURE
--sp_configure 'xp_cmdshell', 1;
--RECONFIGURE

-- testdb.dbo.temptab
exec ('master..xp_cmdshell ''bcp " select * from testdb.dbo.temptab" queryout '+@fname+' -U "sa" -P "99999999" -T -c''') 

drop table temptab

end


相关文章推荐

SqlServer获取存储过程返回值的实例

SqlServer获取存储过程返回值的实例,需要的朋友可以参考一下 1.OUPUT参数返回值 复制代码代码如下: CREATE PROCEDURE [...

SQL2008中使用BCP导出XML文件方法

在网上看了好几篇文章,经过自己的验证,在BCP导出数据时的SQL语句中,需要注意不要用回车键换行,否则会报错。 1.用信任连接 EXEC  xp_cmdshell 'bcp "select 列1,列2...

给存储过程传递一个表(XML运用)

http://www.sqlservercentral.com/articles/Stored+Procedures/2977/ By Jacob Sebastian, 2007/0...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

怎么取出数据库中表的数据生成XML文件

//ReadFrData.java package com.xie.xmlparse.dom4j; import java.sql.Connection; import java.sql.Pre...

c#treeview点击节点闪烁

treeview失去焦点时,点击节点闪烁 public partial class Sandpic : Form { public Sandpic() { ...

WPF Template,ItemsPresenter,ItemContainerStyle,ItemsPanel,contentpresenter

刚开始接触WPF中,这几个概念常常让人迷惑,

存储过程生成XML文件的报表

例一: CREATE OR REPLACE PROCEDURE WST_CST_CHECK_REPORT                            (ERRBUF           ...

oracle 存储过程生成xml文件

CREATE OR REPLACE PROCEDURE Pro_OracleToXML(personid varchar2,name varchar2,address varchar2,tel var...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从SQL存储过程格式化输出到xml文件
举报原因:
原因补充:

(最多只允许输入30个字)