栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL Server表转json

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL Server表转json

我不会真正建议这样做,在应用程序层中有很多更好的方法可以做到这一点,但是以下内容避免了循环,并且比当前方法更冗长:

CREATE PROCEDURE dbo.GetJSON @ObjectName VARCHAr(255), @registries_per_request smallint = nullASBEGIN    IF OBJECT_ID(@ObjectName) IS NULL        BEGIN SELECt Json = ''; RETURN        END;    DECLARE @Top NVARCHAr(20) = CASE WHEN @registries_per_request IS NOT NULL    THEN 'TOP (' + CAST(@registries_per_request AS NVARCHAR) + ') '    ELSE ''END;    DECLARE @SQL NVARCHAr(MAX) = N'SELECT ' + @Top + '* INTO ##T ' +'FROM ' + @ObjectName;    EXECUTE SP_EXECUTESQL @SQL;    DECLARE @X NVARCHAr(MAX) = '[' + (SELECt * FROM ##T FOR XML PATH('')) + ']';    SELECt  @X = REPLACE(@X, '<' + Name + '>',          CASE WHEN ROW_NUMBER() OVER(ORDER BY Column_ID) = 1 THEN '{'   ELSE '' END + Name + ':'), @X = REPLACE(@X, '</' + Name + '>', ','), @X = REPLACE(@X, ',{', '}, {'), @X = REPLACE(@X, ',]', '}]')    FROM    sys.columns    WHERe   [Object_ID] = OBJECT_ID(@ObjectName)    ORDER BY Column_ID;    DROP TABLE ##T;    SELECT  Json = @X;END

注意:我已经更改了您的两部分对象名称(@schema和@table)以仅接受完整的对象名称。

SQL小提琴上的示例

想法是基本上使用SQL-
Server中的XML扩展将表转换为XML,然后仅将开始标记替换为

{ColumnName:
并将结束标记替换为
,
。然后,它需要再进行两次替换,才能停止在每行的最后一列中添加右括号,并
,
从JSON字符串中删除最后一个。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/609251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号