本帖最后由 咖啡里 于 2020-9-2 03:48 编辑
活字格的功能越来越强大,前两天发布了内测版6.0.100,增加了不少强大的功能,其中JSON功能感觉不错,所以就测试的时候顺便玩玩。之前使用存储过程返回的结果集一直使用XML的方式再解析到表,由于XML所生成的字符传过长,查询结果过多时还明显感觉到速度会有所减弱,相比JSON返回的序列就简洁得多。按理应该有所提升(个人理解,没有测试过),当然下面的方法也是从sqlserver查询中取得XML再拼接生成的JSON返回来的序列,这种做法在数据库处理的速度上大大优于页面的处理。
存储过程
- -- =============================================
- -- Author: Lee lin
- -- Create date: 2020-9-2 02:31:16
- -- Description: json_text
- -- =============================================
- CREATE PROCEDURE Pm_json_text
- (@jsontext NVARCHAR(MAX) OUT )
- 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 + 'SELECT [A_A] AS AA,[B_A] AS BB,[C_A] AS CC FROM [dbo].[Table_JSON]'+ '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 @jsontext=@JSON
-
- END
- GO
复制代码 设置存储过程
设置json导入命令
几步就完成。看效果
Document.fgcc
(158.83 KB, 下载次数: 1396)
|