SQL Server 解析 JSON 以更新另一个表

RDa*_*ata 2 sql sql-server json sql-server-json json-value

我在其中一列中有一个包含 JSON 数据的表,我正在尝试解析 JSON 数据并插入到临时表中

DECLARE @TEMPTABLE
( 
     ID INT, 
     Status NVARCHAR(50), 
     Cost DECIMAL(20, 0)
)


INSERT INTO @TEMPTABLE
    SELECT 
        ID, 
        JSON_VALUE(mydata, '$.Status') AS Status,
        JSON_VALUE(mydata, '$.Cost') AS Cost 
    FROM Expense
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

将数据类型 nvarchar 转换为数字时出错

如果我注释掉该Cost列,同样可以正常工作。

成本表中的示例 JSON 数据

 | ID | mydata 
 +----+-------------------------------------
 | 1  | {"Status":"Shipped","Cost":"$10.50"}
Run Code Online (Sandbox Code Playgroud)

Joh*_*tti 5

您可以将该值转换为 MONEY。它比decimal()更宽容一点

例子

Declare @Expense Table ([ID] int,mydata varchar(50))
Insert Into @Expense Values 
 (1,'{"Status":"Shipped","Cost":"$10.50"}')
 
SELECT ID
      ,JSON_VALUE(mydata,'$.Status') as Status
      ,try_convert(money,JSON_VALUE(mydata,'$.Cost'))  as Cost 
 FROM @Expense
Run Code Online (Sandbox Code Playgroud)

退货

ID  Status  Cost
1   Shipped 10.50
Run Code Online (Sandbox Code Playgroud)

  • @RData正如我在你的问题中评论的那样,你的表变量有小数(20,0)而不是小数(20,2)(20,0)是零小数位 (2认同)