Когда вы используете OPENJSON()
с явным определением схемы, синтаксис для определений столбцов чувствителен к регистру. Вам нужно использовать $.Price
в вашей явной схеме:
SELECT * into #PriceTemp
FROM OPENJSON(@json
WITH (
ProductID int '$.productid'
,StartDate date '$.startdate'
,Price money '$.Price'
,UnitType bigint '$.unittype'
,Flag int '$.flag'
)
Если вы не уверены в использовании заглавных букв первого символа на входе JSON, одним из возможных решений является использование OPENJSON()
со схемой по умолчанию и агрегацией. Обратите внимание, что в этом случае OPENJSON()
возвращает таблицу со столбцами key
, value
и type
, а тип данных для столбца value
равен nvarchar(max)
.
SELECT
productid = MAX(CASE WHEN LOWER([key]) = 'productid' THEN [value] END),
startdate = MAX(CASE WHEN LOWER([key]) = 'startdate' THEN [value] END),
price = MAX(CASE WHEN LOWER([key]) = 'price' THEN [value] END),
unittype = MAX(CASE WHEN LOWER([key]) = 'unittype' THEN [value] END),
flag = MAX(CASE WHEN LOWER([key]) = 'flag' THEN [value] END)
FROM OPENJSON(@json)