У меня есть хранимая процедура, которая принимает строку 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)
)
Думал, что это сработает, но не повезло.
Хотелось бы закончить с таблицей вроде