You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server更新nvarchar(max)列时大JSON值写入问题求助

解决SQL Server中超长JSON更新nvarchar(max)列的问题

可行解决方案

1. 变量分段拼接法

声明NVARCHAR(MAX)变量,将超长JSON拆分为多个不破坏JSON语法结构的字符串片段(比如不要在单个字符串或键值对中间断开),通过+拼接成完整内容后执行更新:

DECLARE @fullJson NVARCHAR(MAX);
SET @fullJson = N'{"Text": "testtesttest...第一部分内容"}'
              + N'续接的第二部分内容...testtesttest"'
              + N'...后续所有分段内容}'; -- 确保拼接后是完整合法的JSON

UPDATE Books SET Story = @fullJson WHERE Id = 23;

这种方式避开了SSMS对单引号内超长字符串的识别限制,同时不会引入多余换行符破坏JSON结构。

2. 读取外部JSON文件更新

如果完整JSON已保存为本地文件,可通过OPENROWSET直接读取文件内容赋值给变量,再执行更新:

DECLARE @fullJson NVARCHAR(MAX);
SELECT @fullJson = BulkColumn
FROM OPENROWSET(BULK 'D:\data\book_story.json', SINGLE_NCLOB) AS JsonSource;

UPDATE Books SET Story = @fullJson WHERE Id = 23;

注意:SQL Server服务运行账号需要拥有该文件路径的读取权限,路径需使用绝对路径或UNC网络路径。

3. 直接编辑表单元格

利用SSMS的可视化编辑功能绕开手写SQL的字符串限制:

  • 在SSMS中找到Books表,右键选择编辑前200行(若目标行不在前200,可先筛选出Id=23的行)
  • 双击Story列对应的单元格,直接粘贴完整的超长JSON字符串
  • 点击工具栏的保存按钮完成更新

这种方式由SSMS自动处理字符串存储逻辑,不会出现语法识别或换行符污染JSON的问题。

为什么之前的方法失败?

  • SSMS对直接写在单引号内的字符串有长度限制(约65535字符),超过后无法识别为合法字符串,导致语法高亮异常
  • 手动拆分多行时,SSMS会自动在每行末尾插入换行符(CHAR(10)或CHAR(13)+CHAR(10)),这些未转义的换行符会破坏JSON格式规范,引发验证错误
  • 使用+CHAR(13)+拼接时,若拆分片段本身带换行或拼接逻辑错误,反而会引入多余无效字符,导致JSON验证失败

内容的提问来源于stack exchange,提问作者Filip5991

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 14:43:16