数组 – SQL Server 2016 for JSON输出整数数组
发布时间:2020-12-12 16:22:00 所属栏目:MsSql教程 来源:网络整理
导读:我想使用SQL Server 2016的For JSON功能获取带有整数数组的JSON.我对整数数组感到困惑. 数据库表结构: declare @Employees table (ID int,Name nvarchar(50))insert into @Employees values(1,'Bob'),(2,'Randy')declare @Permissions table (ID int,Permiss
我想使用SQL Server 2016的For JSON功能获取带有整数数组的JSON.我对整数数组感到困惑.
数据库表结构: declare @Employees table (ID int,Name nvarchar(50)) insert into @Employees values (1,'Bob'),(2,'Randy') declare @Permissions table (ID int,PermissionName nvarchar(50)) insert into @Permissions values (1,'Post'),'Comment'),(3,'Edit'),(4,'Delete') declare @EmployeePermissions table (EmployeeID int,PermissionID int) insert into @EmployeePermissions values (1,1),(1,2),3) 期望的结果: {"EmployeePermissions": [ {"Employee":"Bob","Permissions":[1,2]},{"Employee":"Randy",2,3]} } 这是我得到的最接近的,但不是我想要的. select e.Name as Employee,(select convert(nvarchar(10),ep.PermissionID) as PermID from @EmployeePermissions ep where ep.EmployeeID=e.ID for json path) as 'Permissions' from @Employees e for json path,root('EmployeePermissions') 收益: {"EmployeePermissions": [ {"Employee":"Bob","Permissions":[{"permID":1},{"permID":2}]},{"permID":2},{"permID":3}]} } 解决方法在AdventureWorks 2016 CTP3 JSON示例中,您可以找到一个可以清除键:值对的数组并创建数组od值的函数:DROP FUNCTION IF EXISTS dbo.ufnToRawJsonArray GO CREATE FUNCTION [dbo].[ufnToRawJsonArray](@json nvarchar(max),@key nvarchar(400)) returns nvarchar(max) AS BEGIN declare @new nvarchar(max) = replace(@json,CONCAT('},{"',@key,'":'),',') return '[' + substring(@new,1 + (LEN(@key)+5),LEN(@new) -2 - (LEN(@key)+5)) + ']' END 只需将SELECT FOR JSON表达式的结果作为@json参数和要作为第二个参数删除的键的名称.可能类似于: select e.Name as Employee,JSON_QUERY(dbo.ufnToRawJsonArray( (select convert(nvarchar(10),ep.PermissionID) as PermID from @EmployeePermissions ep where ep.EmployeeID=e.ID for json path),'PermID')) as 'Permissions' from @Employees e for json path,root('EmployeePermissions') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 在oracle中更新多个嵌套表中的多个记录
- neo4j – 以Cypher格式导出整个数据库(ASCII文本)?
- centos6.5中安装mongodb简明总结
- 浅析一个MYSQL语法(在查询中使用count)的兼容性问题
- Excel导入Sqlserver数据库脚本
- sql-server – SQLCMD,命令行变量和脚本:setvar
- sql-server – 当日期字段为1/1/1900时显示空字符串
- Telerik Reporting Q2 2008 SP2
- mysql Access denied for user ‘root’@’localhost’ (us
- 数据类型int、bigint、smallint 和 tinyint范围(sqlserver)
推荐文章
站长推荐
- oracle忘记sys/system/scott用户密码的解决方法
- sql-server – 退役:如何根据我的SQL Server列出
- sqlserver导入sql文件 sqlserver中通过osql/ocmd
- SQL Server:从VARCHAR(MAX)字段替换无效的XML字
- 对于Hibernbate SQLServer 2008 No Dialect mapp
- 自动化收集SQLSERVER诊断信息的工具选择及使用介
- sqlserver在触发器中执行动态sql用到inserted(d
- 统计SQLSERVER用户数据表大小
- sql-server-2005 – 具有空值的SQL Server 2005唯
- 一道关于 SQLServer 交叉查询的 外企面试题
热点阅读