繁体   English   中英

Sql 服务器列序列化无key

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM