辣手的XML,如何将sql server批量导出到xml?

emailqjc 2009-07-25 03:41:37
如何将sql server批量导出到xml?
我想从SQL数据库导出数据到XML的格式如下:
<?xml version="1.0" encoding="gb2312" ?>
<ecsjsjhtxx SJBH="0000010101" GHSBH="000001" HTLSH="1" HTLXID="01" WRITERQ="2002-01-25T00:00:00" HTSTARTRQ="2007-09-14T23:19:00" HTENDRQ="2015-12-31T00:00:00" JXLXID="01" SHFSID="01" DHFSID="01" JSFSID="05" NeedTax="NO" NeedKCBZ="T" JSZQ="30" KDLXID="01" KDL="0.000000" ArriveDay="3" KDFY="0.0000" BDJE="0.0000" ZGBHID="0000" USEMJ="0.00" APeople="0" BPeople="0" BDMODE="T" MonthRent="0.0000" RentBail="0.0000" CashType="UN" AWRITER="甲方" BWRITER="已方" CEKUSERID="00000" CHECKRQ="2007-09-14T23:19:00" HTNOTE="" CONTINUENO="0" SCJSRQ="2007-09-14T23:19:26.797" ZTBZ="T" ZTRQ="2008-12-15T14:04:26.357" ZTSM="" USERID="00000" REMARK="" />
<ecsjsjhtxx SJBH="0000010102" GHSBH="000001" HTLSH="2" HTLXID="01" WRITERQ="2002-01-25T00:00:00" HTSTARTRQ="2007-10-05T00:00:00" HTENDRQ="2007-12-31T00:00:00" JXLXID="01" SHFSID="01" DHFSID="01" JSFSID="05" NeedTax="NO" NeedKCBZ="T" JSZQ="30" KDLXID="01" KDL="0.000000" ArriveDay="3" KDFY="0.0000" BDJE="0.0000" ZGBHID="0000" USEMJ="0.00" APeople="0" BPeople="0" BDMODE="T" MonthRent="0.0000" RentBail="0.0000" CashType="UN" AWRITER="ZHY" BWRITER="YY" HTNOTE="" CONTINUENO="0" SCJSRQ="2007-10-04T21:04:29.920" ZTBZ="T" ZTRQ="2007-11-03T16:12:10.873" USERID="00004" REMARK="不再使用" />
<ecsjsjhtxx SJBH="0000020101" GHSBH="000002" HTLSH="1" HTLXID="01" WRITERQ="2006-12-11T14:44:00" HTSTARTRQ="2007-09-14T23:19:00" HTENDRQ="2015-12-31T00:00:00" JXLXID="01" SHFSID="01" DHFSID="01" JSFSID="05" NeedTax="NO" NeedKCBZ="T" JSZQ="30" KDLXID="01" KDL="0.000000" ArriveDay="3" KDFY="0.0000" BDJE="0.0000" ZGBHID="0000" USEMJ="0.00" APeople="0" BPeople="0" BDMODE="T" MonthRent="0.0000" RentBail="0.0000" CashType="UN" AWRITER="甲方" BWRITER="已方" CEKUSERID="00000" CHECKRQ="2007-09-14T23:19:00" HTNOTE="" CONTINUENO="0" SCJSRQ="2007-09-14T23:19:26.797" ZTBZ="T" ZTRQ="2008-12-15T14:04:26.357" ZTSM="" USERID="00000" REMARK="" />

也就是说每一条记录集就是一条,可是怎么总是不对
...全文
418 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wadotnet 2009-10-13
  • 打赏
  • 举报
回复
我也想知道,但是不会呀!急!我着急!更急想帮帮你。。。
emailqjc 2009-07-27
  • 打赏
  • 举报
回复
1、有一表结构如下:
create table et_order_message
(
MsgTitle varchar(20),
MsgContent varchar(20),
UserID varchar(20),
OrderID varchar(20),
INsertTime varchar(20),
IsRead varchar(20),
MsgType varchar(20),
MsgEx varchar(20),
IsCancel varchar(20)
)

2、向表里面写数据:
insert into et_order_message
select '99','0','10000440','495434','2000/1/1 0:00:00',0,0,'',0
union all
select '99','0','10000440','495434','2000/1/1 0:00:00',0,0,'',0
3、我产生XML的SQL语句如下:
select 1 AS Tag,
NULL AS Parent,
null as 'Msg!1!',
null as 'Item!2!id',
null as 'Item!2!MsgContent!Element',
null as 'Item!2!UserID!Element',
null as 'Item!2!OrderID!Element',
null as 'Item!2!INsertTime!Element',
null as 'Item!2!IsRead!Element',
null as 'Item!2!MsgType!Element',
null as 'Item!2!MsgEx!Element',
null as 'Item!2!IsCancel!Element'
from et_order_message
union all
select 2 as Tas,
1 as Parent,
'',
'',
MsgContent,UserID,OrderID,INsertTime,IsRead,MsgType,MsgEx,IsCancel
from et_order_message
FOR XML EXPLICIT

4、产生的结果如下:
<Msg />
<Msg />
<Msg />
<Msg>
<Item id="">
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx></MsgEx>
<IsCancel>0</IsCancel>
</Item>
<Item id="">
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx></MsgEx>
<IsCancel>0</IsCancel>
</Item>
<Item id="">
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx></MsgEx>
<IsCancel>0</IsCancel>
</Item>
<Item id="">
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx></MsgEx>
<IsCancel>0</IsCancel>
</Item>
</Msg>

请问我怎么去掉最上面的:
<Msg />
<Msg />
<Msg />
<Msg>
emailqjc 2009-07-27
  • 打赏
  • 举报
回复
不是哪个问题,生成XML必须为1
guguda2008 2009-07-27
  • 打赏
  • 举报
回复
SELECT 1改成SELECT DISINTCT 1试试
emailqjc 2009-07-27
  • 打赏
  • 举报
回复
急。。。
emailqjc 2009-07-27
  • 打赏
  • 举报
回复
朋友们捧捧场塞
kkun_3yue3 2009-07-25
  • 打赏
  • 举报
回复
导出XML
示例供参考
/*
Borrowed from Kent's code
*/

declare @agent table
(
AgentID int,
Fname varchar(5),
SSN varchar(11)
)

insert into @agent
select 1, 'Vimal', '123-23-4521' union all
select 2, 'Jacob', '321-52-4562' union all
select 3, 'Tom', '252-52-4563'

declare @address table
(
AddressID int,
AddressType varchar(12),
Address1 varchar(20),
Address2 varchar(20),
City varchar(25),
AgentID int
)

insert into @address
select 1, 'Home', 'abc', 'xyz road', 'RJ', 1 union all
select 2, 'Office', 'temp', 'ppp road', 'RJ', 1 union all
select 3, 'Home', 'xxx', 'aaa road', 'NY', 2 union all
select 4, 'Office', 'ccc', 'oli Com', 'CL', 2 union all
select 5, 'Temp', 'eee', 'olkiu road', 'CL', 2 union all
select 6, 'Home', 'ttt', 'loik road', 'NY', 3

/*
End Borrow
*/

SELECT
Tag,
Parent,
[Agents!1!],
[Agent!2!AgentID],
[Agent!2!Fname!Element],
[Agent!2!SSN!Element],
[AddressCollection!3!Element]
FROM (
SELECT
1 AS Tag,
NULL AS Parent,
0 AS Sort,
NULL AS 'Agents!1!',
NULL AS 'Agent!2!AgentID',
NULL AS 'Agent!2!Fname!Element',
NULL AS 'Agent!2!SSN!Element',
NULL AS 'AddressCollection!3!Element'
UNION ALL
SELECT
2 AS Tag, 1 AS Parent,
AgentID * 100 AS Sort,
NULL, AgentID, Fname, SSN,
NULL
FROM @agent
UNION ALL
SELECT
3 AS Tag, 2 AS Parent,
AgentID * 100 + 1 AS Sort,
NULL, NULL, NULL, NULL,
NULL
FROM @agent
) A
ORDER BY Sort
FOR XML EXPLICIT


导入,供参考
alter Procedure Msg_ET_Order_Message_Batch_Insert(
@MsgArray xml
)
as
begin
DECLARE @docHandle int
EXEC sp_xml_preparedocument @docHandle OUTPUT, @MsgArray;
INSERT INTO et_order_message
SELECT
MsgTitle 'MsgTitle',
REPLACE(MsgContent,'UserName',ISNULL(NULLIF(Cms_Member.UserName,''),'会员')) 'MsgContent',
UserID 'UserID',
OrderID 'OrderID',
INsertTime 'INsertTime',
IsRead 'IsRead',
MsgType 'MsgType',
MsgEx 'MsgEx',
IsCancel 'IsCancel'
FROM OPENXML(@docHandle, N'/Msg/Item',2)
WITH et_order_message LEFT JOIN CMS_MEMBER
ON UserID = CMS_MEMBER.T_ID
EXEC sp_xml_removedocument @docHandle
end

/*
参考示例
<?xml version="1.0" encoding="gb2312"?>
<Msg>
<Item>
<MsgTitle>7</MsgTitle>
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx>
</MsgEx>
<IsCancel>0</IsCancel>
</Item>
<Item>
<MsgTitle>7</MsgTitle>
<MsgContent>0</MsgContent>
<UserID>10000440</UserID>
<OrderID>495434</OrderID>
<INsertTime>2000/1/1 0:00:00</INsertTime>
<IsRead>0</IsRead>
<MsgType>0</MsgType>
<MsgEx>
</MsgEx>
<IsCancel>0</IsCancel>
</Item>
</Msg>
*/
xie_yanke 2009-07-25
  • 打赏
  • 举报
回复
主题回答完毕。

你的这个导入导出数据是另外的问题。:D
emailqjc 2009-07-25
  • 打赏
  • 举报
回复
我再说一下我想最终达到的目的:
1 从SQL数据库将数据导出到XML
2 从XML将数据导入SQL数据库

你们有没有完美的解决方案,听听你们的高见,我都不知道什么原因,我昨天明明都测试了的,今天突然就不对了
xie_yanke 2009-07-25
  • 打赏
  • 举报
回复
跟你说过了,如果你非要增加回车符,一行一行的显示, 也告诉你了。(6,7楼)

而对于xml来说,回车无意义。
wujinjian2008n 2009-07-25
  • 打赏
  • 举报
回复
select * from Emp for xml raw('hang'),elements,root('root')
emailqjc 2009-07-25
  • 打赏
  • 举报
回复
我是要求导出到XML 后文件打开,的效果如下:
<ecsjsjhtxx sjbh="0000010101" ghsbh="000001"/>
<ecsjsjhtxx sjbh="0000010102" ghsbh="000001"/>
<ecsjsjhtxx sjbh="0000020101" ghsbh="000002"/>
<ecsjsjhtxx sjbh="0000030101" ghsbh="000003"/>
xie_yanke 2009-07-25
  • 打赏
  • 举报
回复
...Replace("/>", @"\>\n");
xie_yanke 2009-07-25
  • 打赏
  • 举报
回复
一样哈,有没有回车有啥关系?对于xml来说,有没有回车对数据是没关系的。如果你非要加回车,
你在得到字符串结果后,...Replace("/>", "\>\n");
emailqjc 2009-07-25
  • 打赏
  • 举报
回复
还是不对,这样后格式如下:
<ecsjsjhtxx sjbh="0000010101" ghsbh="000001"/><ecsjsjhtxx sjbh="0000010102" ghsbh="000001"/><ecsjsjhtxx sjbh="0000020101" ghsbh="000002"/><ecsjsjhtxx sjbh="0000030101" ghsbh="000003"/><ecsjsjhtxx sjbh="0000040101" ghsbh="000004"/><ecsjsjhtxx sjbh="0000050101" ghsbh="000005"/><ecsjsjhtxx sjbh="0000060101" ghsbh="000006"/><ecsjsjhtxx sjbh="0000070101"
而我要的格式如下:
<ecsjsjhtxx sjbh="0000010101" ghsbh="000001"/>
<ecsjsjhtxx sjbh="0000010102" ghsbh="000001"/>
<ecsjsjhtxx sjbh="0000020101" ghsbh="000002"/>
<ecsjsjhtxx sjbh="0000030101" ghsbh="000003"/>
xie_yanke 2009-07-25
  • 打赏
  • 举报
回复
select * from [表名] for xml RAW('ecsjsjhtxx')
mbh0210 2009-07-25
  • 打赏
  • 举报
回复
DataSet就ok了,
emailqjc 2009-07-25
  • 打赏
  • 举报
回复
我就是用的dataset.WriteXML();
写法如下:
String sConnection = "Data Source=127.0.0.1;Initial Catalog=testdb;User ID=sa;PassWord=newman2007";
SqlConnection mySqlConnection = new SqlConnection(sConnection);
mySqlConnection.Open();
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(" select * from ecsjsjhtxx ", sConnection);
DataSet myDataSet2 = new DataSet();
mySqlDataAdapter.Fill(myDataSet2);
myDataSet2.WriteXml("e:\\000000000000000000000000000000.XML");
tangyong12 2009-07-25
  • 打赏
  • 举报
回复
直接用dataset.WriteXML();
本软件主要功能: 1.批量对多个sql server数据库执行查询或者更新操作。 2.支持将记录集导出为txt、xml,office excel文件中,程序根据本机安装的EXCEL版本自动决定每个sheet最大的行数,超过每个sheet最大的行数后,查询结果集自动拆分工作表。(本版本支持多线程导出,可在关于->全局选项->增强选项设置相关的内容,包括对日期字段以及浮点字段设置导出掩码的功能)。 3.支持查询结果在水晶报表工具简单展示。 4.支持将查询出的结果集,批量复制到多个sql server服务器上。(类似SQLSERVER BCP工具,支持在批量复制之前或者之后同步执行特定的语句)。 5.支持将查询结果转换为sql语句。 6.支持批量对多个sql server数据库的特定用户修改密码。(随机密码) 7.支持同时对多个windows主机进行批量注销、重启,关机操作。 8.支持同时对多个windows主机的特定用户修改密码。(随机密码) 9.支持同时对多个windows主机执行特定的cmd命令。 10.对于EXCEL数据源的导入支持2003以及2007之后的版本。 11.对于相关操作的日志展示,将错误的日志在单独选项卡展示。 12.对于不需要返回结果的操作可勾选,菜单关于->全局选项->不返回任何结果集。(此选项在执行非查询语句时加快执行速度使用)。 本软件免费,注册功能仅用于统计使用人数,如需注册请加QQ:37605250索取,友情提示:请在QQ验证信息中注明CSDN,谢谢! 安装NET Framework 2.0 SP2框架后仍然无法运行的用户,请安装下列补丁。(或用Microsoft Update更新到最新的补丁即可) Windows Server 2003 用于 Windows Server 2003 x86 的 Microsoft .NET Framework 4 (KB982671) Windows Server 2003 Microsoft .NET Framework 3.5 Service Pack 1 和用于 .NET 版本 2.0 至 3.5 的 .NET Framework 3.5 Family Update (KB951847) x86补丁
2009年度十大SQL Server技巧文章 在向2009年告别之际,我们来回顾一下过去的一年中最受欢迎的SQL Server技巧,包括了OPENROWSET、FILESTREAM等函数的用法、密码工具介绍以及DBA日常工作建议等内容。 通过对这些精华文章的再次回顾,希望可以帮助您梳理一下这一年以来的工作以及学习心得,对未来一年更进一步打下更坚实的基础。 使用bcp工具导入和导出批量数据 微软SQL Server中的批量复制程序(Bulk Copy Program,BCP)能让数据库管理员将数据批量导入表中或将数据从表中批量导入文档中。它还支持一些定义数据如何导出、导入到什么地方、加载哪些数据等选项。  用bcp工具导入和导出批量数据(上)  用bcp工具导入和导出批量数据(中)  用bcp工具导入和导出批量数据(下) 使用SQL Server的OPENROWSET函数 你可能常常会需要运行一个ad hoc查询从远程OLE DB数据源提取数据,或者批量SQL Server表导入数据。在这种情况下,你可以在T-SQL(Transact-SQL,微软对SQL的扩展)中用OPENROWSET函数给数据源传入一个连接串和查询来提取需要的数据。  使用SQL Server的OPENROWSET函数(上)  使用SQL Server的OPENROWSET函数(下) SQL Server密码破解工具简介 在对SQL Server系统执行入侵测试或者更高级别的安全审计时,有一种测试不应该被忽略,那就是SQL Server密码测试。这一点看起来显而易见,但是很多人都会忽略它。  SQL Server密码破解工具简介 使用XMLSQL Server上创建计算列 在SQL Server数据库中,当你想使用一个数据,而这个数据不保存在表中,计算列很有用。在SQL Server中使用XML数据来创建计算列,你的列定义必须包含必要的用来检测向列中插入的是什么数据的表达式。  使用XMLSQL Server上创建计算列(上)  使用XMLSQL Server上创建计算列(下) SQL Server中已满事务日志原因的检测 对于SQL Server数据库管理员来讲,已满事务日志是一个琐碎的,但又很常见的问题。它能引发事务的提前终止,甚至通过阻止所有事务的引入,从而引起系统的崩溃。对于数据库管理员来说,关键是理解将要发生的情况,以便他们可以追踪引起问题的原因。  SQL Server中已满事务日志原因的检测(上)  SQL Server中已满事务日志原因的检测(下) DBA五大浪费时间的工作 DBA以常规方式执行的一些任务,不仅对SQL Server数据库几乎没有益处,而且实际上可能对他们的生产环境造成不利影响。在本文中,我会阐述几类这样的工作。如果你正在执行其中的一些工作,我希望你能尽快停下来。  收缩数据库  碎片整理后重建索引  恢复完整备份  删减事务日志  人工通读错误日志 利用动态管理视图提高SQL Server索引效率 就如同数据库DBA了解的一样,合适的索引能够提高查询性能和应用程序可测量性。但是每个附加的索引,都给系统增加了额外开销,因为随着数据从表和视图中不断增加、修改或清除,SQL Server需要维护这些索引。  利用动态管理视图提高SQL Server索引效率(一)  利用动态管理视图提高SQL Server索引效率(二)  利用动态管理视图提高SQL Server索引效率(三) 在SQL Server tempdb满时检查数据文件 作为一名数据库DBA,肯定会听说过“tempdb数据库满了”。通常我们很容易确定造成这一问题的原因。但是更多的时候这一问题主要源于一组请求,涉及到新代码部署或逐渐增加的数据。  在SQL Server tempdb满时检查数据文件 SQL Server运作的简短课程 在实际执行任务之前,有一点背景信息可以会起到帮助作用。那么,到底SQL Server是如何工作的呢?不管你信不信,理解“黑盒”知识几乎可以在Microsoft SQL Server的所有方面起到帮助作用,例如从备份与存储到复制与镜像。  SQL Server运作的简短课程 实现SQL Server 2008中的文件流功能 SQL Server 2008中最新的文件流功能使得你可以配制一个数据类型为varbinary(max)的列,以便将实际数据存储在文件系统中,而非在数据库中。只要愿意,你仍可以作为一个常规的二进制列来查询此列,即使数据自身存储在外部。  实现SQL Server 2008中的文件流功能(上)  实现SQL Server 2008中的文件流功能(下)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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