查询 Json 数组列和其他当前 table 列

Querying Json array column and other current table column

我有一个 table,它包含三列,我需要从中检索数据。 OtherNames 列之一包含 Json 个对象的数组。

CREATE TABLE Persons (
    NameID int,
    CurrentName varchar(255),
    OtherNames varchar(max),
);

我可以很好地查询该列,但是我怎样才能将它与它所在的 table 通过 ID 连接起来,这样我就可以检索 table 上的所有信息以及与之相关的内容这一行。

DECLARE @test VARCHAR(MAX)

SELECT @test = '[{"Name":"Bob","DateTime":"03/03/2022"},{"Name":"Adam","DateTime":"04/05/2022"}]'

SELECT * FROM OPENJSON(@test)
    WITH (
    Name VARCHAR(MAX) '$.Name',
    DateTime VARCHAR(MAX) '$.DateTime' 
    )

以上结果

Bob     03/03/2022 
Adam    04/05/2022 

我如何加入才能显示 NameID 和 CurrentName?

NameID   Name      DateTime    CurrentName
1        Bob         03/03/2022  Rob
1        Adam        04/05/2022  Rob

可能有多个记录和多个 Json 数据..

正如我在评论中提到的那样,对列使用 OPENJSON,而不是标量变量,它只包含其中一行的值,以及另一行数据的 none。

SELECT P.NameID,
       ONs.[Name],
       ONs.[DateTime],
       P.CurrentName
FROM dbo.Persons P
     CROSS APPLY OPENJSON(P.OtherNames)
                 WITH ([Name] varchar(255),
                       [DateTime] date) ONs;

请注意,由于您的值 [DateTime] 取决于文化,您可能需要将其定义为 WITH 中的 varchar(10),然后将其 CONVERT 定义为date中的SELECT带有样式代码。