[英]Sql server column serialization without key
我有A
列,其值为hello
。
我需要将其迁移到值为["hello"]
的新列AJson
中。
我必须使用 Sql 服务器命令来执行此操作。
FOR JSON
等有不同的命令,但它们使用列名序列化值。
这与 C# 方法JsonConvert.SerializeObject(new List<string>(){"hello"}
序列化结果的值相同。
我不能简单地在开头和结尾附加["
因为字符串值可能包含没有正确序列化的字符会破坏 json 字符串。
我的建议是你只需做很多嵌套替换,然后自己做。
FOR JSON 适用于整个 JSON,因此没有密钥时无效。
这是一个用 \n 替换 endline 的简单示例
print replace('ab
c','
','\n')
退格替换为 \b。
用 \f 替换换页符。
换行符替换为 \n。
回车替换为 \r。
用 \t 替换制表符。
双引号替换为 "
反斜杠替换为 \
我的方法是使用这 3 个命令:
UPDATE Offers
SET [DetailsJson] =
(SELECT TOP 1 [Details] AS A
FROM Offers AS B
WHERE B.Id = Offers.Id
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
UPDATE Offers
SET [DetailsJson] = Substring([DetailsJson], 6, LEN([DetailsJson]) - 6)
UPDATE Offers
SET [DetailsJson] = '[' + [DetailsJson] + ']'
..对于操作的答案/表..
UPDATE Offers
SET [DetailsJson] = concat(N'["', string_escape([Details], 'json'), N'"]');
declare @col nvarchar(100) = N'
a b c " : [ ] ]
x
y
z'
select concat(N'["', string_escape(@col, 'json'), N'"]'), isjson(concat(N'["', string_escape(@col, 'json'), N'"]'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.