从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


oracle 存储过程生成xml文件

CREATE OR REPLACE PROCEDURE Pro_OracleToXML(personid varchar2,name varchar2,address varchar2,tel var...
  • chenjinping123
  • chenjinping123
  • 2013年04月02日 17:44
  • 2447

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

http://www.sqlservercentral.com/articles/Stored+Procedures/2977/ By Jacob Sebastian, 2007/0...
  • u012992506
  • u012992506
  • 2014年05月15日 10:49
  • 959

oracle 存储过程生成xml文件

CREATE OR REPLACE PROCEDURE Pro_OracleToXML(personid varchar2,name varchar2,address varchar2,tel var...
  • chenjinping123
  • chenjinping123
  • 2013年04月02日 17:44
  • 2447

直接将XML存入到SQL中(SQL2008)

一、前言 从 SQL Server 2005 开始,就增加了 xml 字段类型,也就是说可以直接把 xml 内容存储在该字段中,并且 SQL Server 会把它当作 xml 来对待,而不是当作 v...
  • xxdddail
  • xxdddail
  • 2013年08月07日 13:12
  • 3167

oracle中使用存储过程解析xml字符串

背景: 数据库中存在两个数据表t_xml和t_parse,前者是将xml文档中主要节点以字符串的形式存放到para_name字段中,后者用于将para_name字段中xml字符串进行解析,将子节点提...
  • whx_1113
  • whx_1113
  • 2013年02月26日 12:50
  • 8256

js格式化xml字符串

无论是在输入xml字符串还是显示xml字符串,都不可避免的判断xml的正确性。 前台js...
  • llhhyy1989
  • llhhyy1989
  • 2014年05月31日 07:32
  • 4452

MySQL自带extractvalue解析XML,MySQL存储过程、游标

表结构如下: 要求把每个xml消息中的某个字段取出来。 方法一:把所有的xml消息导出用Java或Python解析; 方法二:用MySQl的extractvalue解析,也正是所要讲的首先看看解析一...
  • github_38222176
  • github_38222176
  • 2017年12月28日 13:59
  • 32

存储XML格式数据的原理

稍微了解 同其他数据格式相比,XML的一大优点就是它非常类似对象数据结构。由于目前的程序设计和开发大多是面向对象的,所以用XML来表达数据可以让数据的处理和传播变得非常方便。可是,在用XML存储数据...
  • cjjwwss
  • cjjwwss
  • 2013年10月14日 23:00
  • 948

xml的网页格式化展示(略粗浅)

xml数据的格式化展示,加了一些缩进换行等效果: Json网页格式化展示 body { margin:0; font-family:"微软雅黑"; font-size:12px; } ...
  • had_meno
  • had_meno
  • 2016年11月04日 15:41
  • 484

Mybatis之-调用存储过程

存储过程: use base_passport go   create proc yhj_test     @input_a int,     @input_b int,    ...
  • xwnxwn
  • xwnxwn
  • 2016年12月22日 16:35
  • 1376
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从SQL存储过程格式化输出到xml文件
举报原因:
原因补充:

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