Sql server 如何将JSON与表连接?

Sql server 如何将JSON与表连接?,sql-server,Sql Server,我有一个带有列名的主表,例如: 表名:用户属性 --------------------------------- ColumnId ColumnName --------------------------------- 1名 2电子邮件 3手机设置如下: declare @attributes table (Id int identity(1,1), Name sysname); insert into @attributes (Name) values ('Name'),('Email

我有一个带有列名的主表,例如:

表名:用户属性
---------------------------------
ColumnId ColumnName
---------------------------------
1名
2电子邮件

3手机
设置如下:

declare @attributes table (Id int identity(1,1), Name sysname);

insert into @attributes (Name)
values
('Name'),('Email'),('Phone');

declare @data table (
  UserId int,
  JData nvarchar(max)
);

insert into @data (UserId, JData)
values
(1, N'{"Name":"abc","Email":"abc@test.com","Phone":"23231233","Company":"test"}'),
(2, N'{"Name":"xyz","Email":"xyz@test.com","Phone":"8909788","Location":"NA"}');
,很容易从JSON blob中只过滤必要的属性:

select d.UserId, ua.*
from @data d
  cross apply openjson(d.JData) ua
  inner join @attributes a on a.Name = ua.[key] collate database_default;

OPENJSON
函数至少需要SQL Server 2016才能工作。

给定如下设置:

declare @attributes table (Id int identity(1,1), Name sysname);

insert into @attributes (Name)
values
('Name'),('Email'),('Phone');

declare @data table (
  UserId int,
  JData nvarchar(max)
);

insert into @data (UserId, JData)
values
(1, N'{"Name":"abc","Email":"abc@test.com","Phone":"23231233","Company":"test"}'),
(2, N'{"Name":"xyz","Email":"xyz@test.com","Phone":"8909788","Location":"NA"}');
,很容易从JSON blob中只过滤必要的属性:

select d.UserId, ua.*
from @data d
  cross apply openjson(d.JData) ua
  inner join @attributes a on a.Name = ua.[key] collate database_default;

OPENJSON
函数至少需要SQL Server 2016才能工作。

您的代码片段可能看起来很华丽,但在功能方面完全无用。您的代码片段可能看起来华丽,但在功能方面完全无用。