如何删除存储在SQL Server列中的JSON属性?

时间:2015-04-28 11:30:05

标签: sql-server json

我有一项任务是删除保存在SQL Server数据库表列中的JSON属性。这是我表格的结构

OrderId   Name   JSON

JSON列中,我有这个JSON数据:

{ 
    "Property1" :"",
    "Property2" :"",
    "metadata-department": "A",
    "metadata-group": "B"
}

我有超过500条具有此json值的记录。

我可以更新所有记录以删除metadata-department吗?

3 个答案:

答案 0 :(得分:8)

这个问题已经过时了,但我想我会为那些可能通过搜索引擎来到这里的人发布另一个解决方案。

在SQL Server 2016或SQL Azure中,以下工作:

DECLARE @info NVARCHAR(100) = '{"name":"John","skills":["C#","SQL"]}'

PRINT JSON_MODIFY(@info, '$.name', NULL)

-- Result: {"skills":["C#","SQL"]}

来源:https://msdn.microsoft.com/en-us/library/dn921892.aspx

答案 1 :(得分:2)

使用SQL字符串函数来删除'属性metadata-department。 像这样:

    declare @string varchar(1000) =
    '{ 
        "Property1" :"",
        "Property2" :"",
        "metadata-department": "A",
        "metadata-group": "B"
    }'


    select SUBSTRING(@string, 0, CHARINDEX('"metadata-department"',@string)) 
         + SUBSTRING(@string, CHARINDEX('"metadata-group"', @string), len(@string))

<强>结果:

{       
    "Property1" :"",
    "Property2" :"",
    "metadata-group": "B"  
}

<强>更新

UPDATE TableX
SET JSON =
SUBSTRING(JSON, 0, CHARINDEX('"metadata-department"',JSON))
+ SUBSTRING(JSON, CHARINDEX('"metadata-group"', JSON), len(JSON))

答案 2 :(得分:1)

在我的SQL Server环境中,我已经安装了CLR RegEx Replace功能并使用这些功能,我已经实现了你想要的:

DECLARE @Text NVARCHAR(MAX) = '{ 
    "Property1" :"",
    "Property2" :"",
    "metadata-department": "A",
    "metadata-group": "B"
}';

PRINT dbo.RegExReplace(@Text, '"metadata-department": "[A-Za-z0-z]",\r\n\s+', '');

<强>结果:

{ 
    "Property1" :"",
    "Property2" :"",
    "metadata-group": "B"
}

CLR来源:https://www.simple-talk.com/sql/t-sql-programming/clr-assembly-regex-functions-for-sql-server-by-example/