如何获取JSON字符串中行的详细行号

问题描述 投票:0回答:2

我有一个存储过程接受一个NVARCHAR(max)字符串,该字符串是我在将其加载到实时表之前需要验证的JSON数据。如果验证失败,我需要返回一个带有问题的消息和坏数据行的行号。这些行没有在JSON字符串中指定的编号,但它们存储在字符串中的顺序隐含了这些编号。我试图在OPENJSON函数期间分配一个增量数字。

使用XML时我可以这样做:

SELECT ROW_NUMBER() OVER (ORDER BY item) AS rowOrder 
     , item.value('(./Id/text())[1]', 'bigInt') AS EId
     , item.value('(./Name/text())[1]', 'nvarchar(255)') AS EName
     , item.value('(./Number/text())[1]', 'nvarchar(30)') AS ENumber
FROM @ERow.nodes('/variable/item') AS main(item);

派生它,但该技术不适用于OPENJSON

如果可能的话,我宁愿不通过两次传递 - 即将数据加载到临时表中,然后使用行号更新临时表中的行

SELECT ROW_NUMBER() OVER () AS rownum
     , newColumnName
     , decimal_column
     , nvarchar_column 
FROM OPENJSON(@JSON_String)
WITH (
    newColumnName BIGINT '$.id_column',
    decimal_column  DEC(28,8),
    nvarchar_column NVARCHAR(30)
)

认为这会起作用但没有运气。

想结束像Sample Result Set这样的桌子

sql json sql-server row-number open-json
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.