注:此方法仅支持SQL2005
最近需要把数据导成XML,不想通过编程实现,手工使用导入导出工具又觉得麻烦,想想还是写SQL语句运行的好,以后扩展也方便,但Microsoft好像并没有提供什么SQL语句可以直接导出方法,用bcp导出的都是文本、EXCEL或其他什么的,本来以为可以把查询结果通过bcp导出文本的形式,但经过N次试验,导出的XML不知道为什么都会自动换行,一打开就会报错,百思不得其解,而且导出的XML没有一个<Root>,这也是个麻烦事。
最关键的就是这两个问题:1.如何使用XML不自动换行;2.如何增加一个<Root>标签;
查看了N篇与其相关的联机帮助,一个xml的数据类型提醒了我,觉得可以把查询结果做为一个变量存储后再导出,通过连接一个视图来增加<Root>标签,以下是样例代码:
USE Test
--创建一个表
CREATE TABLE Test_blan (x varchar(100), y varchar(100))
--插入数据
INSERT INTO Test_blan VALUES(...略...)
--创建一个视图用于增加<Root>标签
CREATE VIEW AS SELECT 'root' l
--创建一个表用于存储生成的XML结果
CREATE TABLE TT (aa xml)
--定义一个XML的变量
DECLARE @x xml
--查询生成XML结果并存储到TT表中
SET @x=( SELECT IRoot.l, IDate.x,IData.y FROM Test..Test_Log IRoot, Test..Test_blan IData FOR XML AUTO)
INSERT TT VALUES(@x)
--通过bcp将TT中的XML结果输出
EXEC master..xp_cmdshell 'bcp Test..TT out e:/123.xml -c -T -k'
--删除表及视图
DROP TABLE TT
DROP VIEW Test_Log
这样导出的XML就是个完整的文件了