无键Sql server列序列化
我有一个值为hello的列 我需要用值[hello]将它迁移到新的列AJson中 我必须使用Sql Server命令来执行此操作 JSON等有不同的命令,但它们用列名序列化值 这与C方法JsonConvert.SerializeObjectnew List{hello}序列化结果的值相同无键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,因此没有键无效
我不能简单地在开头和结尾附加[因为字符串值可能包含字符,如果不进行适当的序列化,这些字符将破坏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命令以正确的格式序列化列值。