我正在try 使用解析为文本的大型JSON手动更新类型为nvarchar(max)的SQL Server列.

这是一个简单、直接的查询:

UPDATE Books 
SET Story = '' 
WHERE Id = 23

当我试图插入到Story中的JSON包含一个巨大的值时,问题就会发生,这是JSON的一部分(我认为断点大约是38k个字符)

"Text": "testtesttesttest..." (imagine the value is 50k characters)

在SQL Server Management Studio中,单引号中的文本值通常是红色的,但这次不是,因为它的值很大.如果我将文本分成多个新行,那么它将被接受为"有效"字符串,但JSON验证失败-

JSON文本的格式不正确.意外字符‘ ‘在33043号位置被发现.

enter image description here

我也try 了用+CHAR(13)+‘分割大行,但没有成功.

有没有办法在维护整个JSON的同时更新值?

推荐答案

超过32,768个字符(POWER(2,15))的行将中断该行和所有后续行的智能感知和语法突出显示.

您可以忽略它,因为它仍然可以很好地执行.

或者,您可以拆分各行并连接字符串.这不会在字符串中嵌入换行符.

确保您连接的所有元素都具有N前缀,并且第一个元素的类型为MAX

UPDATE Books 
    SET Story = CAST(N'YourLongString' AS NVARCHAR(MAX)) + 
                N'YourLongStringContinued'
WHERE Id = 23

或者,您可以使用backslash character将字符串继续到新行,而不插入换行符,但您需要 suppress 在此处缩进字符串的冲动,以避免在字符串内容本身中插入不需要的空格(并确保\之后没有尾随空格,因为它必须是该行的最后一个字符).

    UPDATE Books 
        SET Story = 
N'YourLongString\
YourLongStringContinued'
    WHERE Id = 23

enter image description here

如果您乐于接受IntelliSense将在长行中断,但只是试图避免它在后续行中也被中断,您甚至可以为此声明一个变量,并在文件的最后一行分配长字符串.并使用GOTO将变量赋值并跳回文件中的原始位置.

Json相关问答推荐

如何使用ChoETL将复杂的JSON转换为CSV

服务器不返回JSON

如何使用PowerShell从ExchangeOnline命令执行中获得JSON输出

Oracle JSON 查询中的动态列列表

删除 JOLT 中的方括号

如何将属性拆分为嵌套的JSON内容?

如何使用 SQL Server 将 json 存储为字符串的列分解/规范化为行和列?

使用 Ansible 解析来自 Juniper 交换机的 JSON 输出

JSON 模式实际用于什么目的?

如何使用 CORS 实现 JavaScript Google Places API 请求

JSON extract\set 的 SQLite JSON1 示例

Qt使用QJsonDocument、QJsonObject、QJsonArray解析JSON

ASP.NET MVC:使用 JsonResult 控制属性名称的序列化

通过 RestAssured 中的 JsonPath 访问匿名数组的元素

jQuery fullcalendar 发送自定义参数并使用 JSON 刷新日历

如何在已声明的 JSON 对象中添加键值对

JSON Schema:验证数字或空值

有 Json 标签但未导出

使用 JSON.NET 序列化/反序列化对象字典

是否有一个 PHP 函数只在双引号而不是单引号中添加斜杠