create proc [dbo].[TableToJson]
@tableName varchar(30) --表名,临时表需要 # 开头
/* 需要转换的列名,支持三种方式:
* 1. ='', 转换所有字段;
* 2. ='colName1,colName2,colName3,...', 转换输入的字段;
* 3. ='<>,colName1,colName2,colName3,...', 转换除了输入字段的其他字段
*/
,@toJsonColArry varchar(500)
,@whereStr varchar(500)='' --表where条件
,@toObjectOrJson char(1)='J' --O生成Object,J生成Json,S生成JsonString(对{}里面的"(双引号)使用\(斜杠)进行转义,并且{}使用"(双引号)包括)
/*标识该字段的值是object类型,仅当toObjectOrJson='J'时有效。当生成Json数据时,该字段的值不用""(双引号)包括
* 1. ='', 默认是string类型。即字段的值用""(双引号)包括
* 2. ='colName1,colName2,colName3,...',标识该字段的值是object类型
*/
,@objectColArry varchar(500)=''
,@jsonStr nvarchar(max) output --输出生成Object或Json字符串
as
set nocount on
--declare @toJsonColArry varchar(500)='pnIsErr,priceIsErr,priceMaxErr',@tableName varchar(30)='#temp_tb'
--drop table #splitTb
/******************获取表的表名和表id,数据表从syscolumns 表获取,临时表从 tempdb.dbo.syscolumns 表获取*******************/
declare @colTable varchar(30)='',@colTable_id int=1
if (isnull(object_id(@tableName),'')<>'')
begin
select @colTable='syscolumns',@colTable_id=object_id(@tableName)
end
else if(isnull(object_id('tempdb..'+(@tableName)),'')<>'')
begin
select @colTable='tempdb.dbo.syscolumns',@colTable_id=object_id('tempdb..'+(@tableName))
end
--表不存在,返回空字符
else
begin
set @jsonStr=''
return
end
/******************生成字段名过滤字符串*******************/
declare @nameStr nvarchar(max)=''
if(isnull(@toJsonColArry,'')<>'')
begin
select * into #colNameArry from dbo.fn_split(@toJsonColArry,',')
declare @cols nvarchar(max)=''
declare @seq int =1,@maxSeq int
set @maxSeq=(select max(seq) from #colNameArry)
if((select value from #colNameArry where seq=1)='<>')
begin
set @seq=2
set @nameStr=@nameStr+' and name not in ('
end
else
begin
set @seq=1
set @n
sql table数据转json数据
最新推荐文章于 2024-09-22 14:25:26 发布
这篇博客演示了如何使用SQL将表数据转换为JSON格式,包括转换所有字段、指定字段、排除字段以及转换为对象类型,并提供了带有where条件的转换示例。
摘要由CSDN通过智能技术生成