赞
踩
- 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

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。