如果我们只有一个对象,这就很好了:SELECT JSON_VALUE('{"Name": "Test"}', '$.Name');输出:测试如何在MS SQL中从json数组获取每个Name属性?SELECT JSON_VALUE('[{"Name": "Test"},{"Name": "Test2"}]', '$.Name');预期输出:2行,Test和Test2
SELECT JSON_VALUE('{"Name": "Test"}', '$.Name');
Name
SELECT JSON_VALUE('[{"Name": "Test"},{"Name": "Test2"}]', '$.Name');
lf3rwulv1#
因为您希望行作为输出you'll need to use OPENJSON (maybe with CROSS APPLY)而不是标量函数(如JSON_VALUE)。
OPENJSON
CROSS APPLY
JSON_VALUE
@jsonText
DECLARE @jsonText nvarchar(max) = N'[{"Name": "Test"},{"Name": "Test2"}]'; SELECT j."Name" FROM OPENJSON( @jsonText ) WITH ( "Name" nvarchar(256) '$.Name' ) AS j;
小时
DECLARE @t TABLE ( JsonBlargh nvarchar(max) NOT NULL ); INSERT INTO @t ( JsonBlargh ) VALUES ( N'[{"Name": "Test"},{"Name": "Test2"}]' ), ( N'[{"Name": "Test3"},{"Name": "Test4"}]' ), ( N'[{"Name": "Test5"},{"Name": "Test6"}]' ); ----------- SELECT j."Name" FROM @t AS t CROSS APPLY OPENJSON( t.JsonBlargh/*, '$.Name'*/ ) WITH ( "Name" nvarchar(256) '$.Name' ) AS j
1条答案
按热度按时间lf3rwulv1#
因为您希望行作为输出you'll need to use
OPENJSON
(maybe withCROSS APPLY
)而不是标量函数(如JSON_VALUE
)。如果JSON位于标量T-SQL变量或参数(例如
@jsonText
)中,则可以执行以下操作:小时
如果它位于表列中,请使用
CROSS APPLY
,如下所示:小时