SQL Server中如何将数据导出为XML或Json文件
类别:数据库 浏览量:2419
时间:2015-12-29 SQL Server中如何将数据导出为XML或Json文件
SQL Server中如何将数据导出为XML或Json文件一、数据导出为XML文件
在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML。通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了。
例如
1、sqladmin表的数据如图
2、通过如下BCP命令将其导出为XML文件
BCP "SELECT TOP 30 [bom_no],[LEVEL] FROM [sqladmin].[dbo].[bom] FOR XML path,TYPE, ELEMENTS ,ROOT('RegionSales')" QUERYOUT "d:\temp\test.XML" -c -t -T -S localhost
3、执行完成后查看Test.XML文件,如下图所示。
二、数据导出为Json文件
1、新建如下存储过程,例如命名为SerializeJSON
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE[dbo].[SerializeJSON](
@ParameterSQL AS VARCHAR(MAX)
)
AS
BEGIN
DECLARE @SQL NVARCHAR(MAX)
DECLARE @XMLString VARCHAR(MAX)
DECLARE @XML XML
DECLARE @Paramlist NVARCHAR(1000)
SET @Paramlist = N'@XML XML OUTPUT'
SET @SQL = 'WITH PrepareTable (XMLString)'
SET @SQL = @SQL + 'AS('
SET @SQL = @SQL + @ParameterSQL+ 'FOR XML RAW,TYPE,ELEMENTS'
SET @SQL = @SQL + ')'
SET @SQL = @SQL + 'SELECT @XML=[XMLString]FROM[PrepareTable]'
EXEC sp_executesql @SQL, @Paramlist, @XML=@XML OUTPUT
SET @XMLString=CAST(@XML AS VARCHAR(MAX))
DECLARE @JSON VARCHAR(MAX)
DECLARE @Row VARCHAR(MAX)
DECLARE @RowStart INT
DECLARE @RowEnd INT
DECLARE @FieldStart INT
DECLARE @FieldEnd INT
DECLARE @KEY VARCHAR(MAX)
DECLARE @Value VARCHAR(MAX)
DECLARE @StartRoot VARCHAR(100);SET @StartRoot='<row>'
DECLARE @EndRoot VARCHAR(100);SET @EndRoot='</row>'
DECLARE @StartField VARCHAR(100);SET @StartField='<'
DECLARE @EndField VARCHAR(100);SET @EndField='>'
SET @RowStart=CharIndex(@StartRoot,@XMLString,0)
SET @JSON=''
WHILE @RowStart>0
BEGIN
SET @RowStart=@RowStart+Len(@StartRoot)
SET @RowEnd=CharIndex(@EndRoot,@XMLString,@RowStart)
SET @Row=SubString(@XMLString,@RowStart,@RowEnd-@RowStart)
SET @JSON=@JSON+'{'
-- for each row
SET @FieldStart=CharIndex(@StartField,@Row,0)
WHILE @FieldStart>0
BEGIN
-- parse node key
SET @FieldStart=@FieldStart+Len(@StartField)
SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)
SET @KEY=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)
SET @JSON=@JSON+'"'+@KEY+'":'
-- parse node value
SET @FieldStart=@FieldEnd+1
SET @FieldEnd=CharIndex('</',@Row,@FieldStart)
SET @Value=SubString(@Row,@FieldStart,@FieldEnd-@FieldStart)
SET @JSON=@JSON+'"'+@Value+'",'
SET @FieldStart=@FieldStart+Len(@StartField)
SET @FieldEnd=CharIndex(@EndField,@Row,@FieldStart)
SET @FieldStart=CharIndex(@StartField,@Row,@FieldEnd)
END
IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
SET @JSON=@JSON+'},'
--/ for each row
SET @RowStart=CharIndex(@StartRoot,@XMLString,@RowEnd)
END
IF LEN(@JSON)>0SET @JSON=SubString(@JSON,0,LEN(@JSON))
SET @JSON='['+@JSON+']'
SELECT @JSON
END
GO
2、通过如下BCP命令将其导出为Json文件
BCP "[SerializeJSON]'select top 5 [bom_no],[LEVEL] FROM [sqladmin].[dbo].[bom]'" Queryout "d:\temp\test.json" -c -t -T -S localhost
3、执行完成后,得到结果如下图:
标签:SQL Server
您可能感兴趣
- sqlserver数据库还原教程(SQL Server通过重建方式还原master数据库)
- sqlserver定时计划(sql server deadlock跟踪的4种实现方法)
- sql server日期查询语句(SQL Server中查询结果超出了查询时间范围解决方法)
- SQL Server数据库应用中有用的几个工具
- sqlserver纵表变横表(SQL Server行转列的方法解析)
- SQL SERVER中与内存相关的计数器
- sqlserver2008数据库的备份(sql server 2008 压缩备份数据库20g)
- sql server 2008自定义函数(SQL SERVER 2012新增函数之逻辑函数CHOOSE详解)
- sqlserver数据库实时同步(SQL Server实时同步更新远程数据库遇到的问题小结)
- sql server中实现split功能
- sqlserver查看表和存储过程的架构(SQL Server 远程更新目标表数据的存储过程)
- SQL Server Profile事件含义
- windows性能计数器与SQL Server Profiler 组合分析性能
- sql server中sleeping状态
- sqlserver怎么手动添加数据库表(SQL Server 数据库调整表中列的顺序操作方法及遇到问题)
- 2015-10-1
- 宁夏灵武恐龙化石发现始末(宁夏灵武恐龙化石发现始末)
- 到了岁末 临门一脚 节点,天台综合督评会目标直指 全年红(到了岁末临门一脚)
- 寒假余额不满24小时,不如来一场说走就走的亲子阅读之旅(寒假余额不满24小时)
- 省委书记出席的交流会,十位县委书记同场发言,代表公文材料的高水平(省委书记出席的交流会)
- 《刘老根3》热播,去世15年的她却再次被 伤害(去世15年的她却再次被)
- 十二星座爱情支配欲指数(十二星座爱情支配欲指数)
热门推荐
- dedecms数据库备份地址(dedecms搬家时出现数据库导入失败的解决方法)
- 读取浏览器历史的行为(解析浏览器的一些“滚动”行为鉴赏)
- python 暗弱目标提取(Python提取频域特征知识点浅析)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- php错误处理及调试(php报错502 bad gateway解决方法)
- css经典技巧(CSS性能优化提高css性能的方法)
- localstorage底层技术(浅谈Web Storage API的使用)
- react新手指引页面编写(React+TypeScript进行项目构建案例讲解)
- laravel图文消息后台处理(laravel利用中间件防止未登录用户直接访问后台的方法)
- python数据类型基本知识入门(Python Pexpect库的简单使用方法)