我有一项任务是删除保存在SQL Server数据库表列中的JSON属性。这是我表格的结构
OrderId Name JSON
在JSON
列中,我有这个JSON数据:
{
"Property1" :"",
"Property2" :"",
"metadata-department": "A",
"metadata-group": "B"
}
我有超过500条具有此json值的记录。
我可以更新所有记录以删除metadata-department
吗?
答案 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"]}
答案 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"
}