无键Sql server列序列化

无键Sql server列序列化,sql,json,sql-server,Sql,Json,Sql Server,我有一个值为hello的列 我需要用值[hello]将它迁移到新的列AJson中 我必须使用Sql Server命令来执行此操作 JSON等有不同的命令,但它们用列名序列化值 这与C方法JsonConvert.SerializeObjectnew List{hello}序列化结果的值相同 我不能简单地在开头和结尾附加[因为字符串值可能包含字符,如果不进行适当的序列化,这些字符将破坏json字符串。我的建议是,您只需进行大量嵌套替换,然后自己进行 FOR JSON用于整个JSON,因此没有键无效

我有一个值为hello的列

我需要用值[hello]将它迁移到新的列AJson中

我必须使用Sql Server命令来执行此操作

JSON等有不同的命令,但它们用列名序列化值

这与C方法JsonConvert.SerializeObjectnew List{hello}序列化结果的值相同


我不能简单地在开头和结尾附加[因为字符串值可能包含字符,如果不进行适当的序列化,这些字符将破坏json字符串。

我的建议是,您只需进行大量嵌套替换,然后自己进行

FOR JSON用于整个JSON,因此没有键无效

下面是一个简单的示例,该示例将结束行替换为\n

print replace('ab
c','
','\n')
要替换为\b的退格

要替换为\f的表单馈送

要替换为的换行符\n

要替换为的回车符\r\n

要替换为\t的选项卡

将双引号替换为


将反斜杠替换为\

.op的答案/表格

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'"]'));

我的方法是使用以下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] + ']'


我只需要使用sql server命令以正确的格式序列化列值。